Base de datos Excel
#1
Escrito 05 febrero 2010 - 11:12
He creado un alias en el BDE administrator con un driver de excel y al intentar seleccionar la tabla desde D7 me pide una contraseña.
Gracias de antemano.
#2
Escrito 05 febrero 2010 - 11:16
#3
Escrito 05 febrero 2010 - 11:27
La verdad es que no sé cómo montar el programa con libros de Excel.
Mi idea es poder abrir el libro de Excel desde un programa en Delphi para consultar los datos y a partir de ellos generar resultados y guardarlos en tablas paradox que son las que uso en mi programa. Es para no tener que entrar manualmente las filas del libro de Excel en mi programa en Delphi.
Agradecería tu ayuda si es posible.
#4
Escrito 05 febrero 2010 - 11:33
Este componente si tiene la propiedad que te comenta Enecumene y podría serte de ayuda... después tu TTable lo relaciones al TDataBase...
Además, para ver los datos en el DBGrid te hace falta un TDataSoruce también... imagino que lo estás ya usando
Saludox !
#5
Escrito 05 febrero 2010 - 12:21
#6
Escrito 05 febrero 2010 - 12:39
Tampoco funciona
Desgraciadamente amigo, ésto no nos ayuda mucho para saber qué pasa... coméntanos un poco más de las propiedades que modificaste a tus componentes para hacer la conexión...
Tu hoja de excel a la que deseas tener acceso tiene una contraseña de seguridad establecida ?
Saludox !
#7
Escrito 05 febrero 2010 - 12:40
Aqui hay un ejemplo que aunque este hecho en Visual Basico creo que se puede pasar a delphi.
Este es usando Ado.
Saludos
#8
Escrito 05 febrero 2010 - 12:46
si no ando mal, podrías poner un adoconnection y hacer doble click sobre el componente, al elegir el driver, seleccionas: "Microsoft Jet 4.0 OLE DB Provider", y despues de hacer click en siguiente seleccionas tu archivo de excel.
Despues de eso, agregas un componente del tipo TAdoTable y le asignas a su propiedad connection el componente adoconnection que configuraste anteriormente. lo siguiente que tendrias que hacer es poner el nombre de la hoja que deseas ocupar en la propiedad tablename del TAdoTable.
No lo puedo probar por que no tengo instalado ms office, pero creo que deberia funcionar.
P.D. deberas cambiar la propiedad loginpromt del adoconnection a false tambien.
atte.
Kafastoforman.
#9
Escrito 06 febrero 2010 - 05:57
#10
Escrito 06 febrero 2010 - 08:00
Tampoco funciona
¿ Que es lo que no funciona ?
Abriel el libro de excel o guardar los datos en Excel
Este es el código para abrir cualquier hoja de un libro de excel.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; BitBtn1: TBitBtn; ComboBox1: TComboBox; BitBtn3: TBitBtn; DBGrid1: TDBGrid; DataSource1: TDataSource; ADODataSet1: TADODataSet; ADOConnection1: TADOConnection; OpenDialog1: TOpenDialog; procedure BitBtn1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ADOConnection1BeforeConnect(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Archivo,Hoja: String; implementation {$R *.dfm} procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject); begin ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+ 'Data Source='+Archivo+ ';Extended Properties=Excel 8.0;'+ 'Persist Security Info=False'; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin if OpenDialog1.Execute then begin AdoDataSet1.Close; ADOConnection1.Connected := False; Archivo := OpenDialog1.FileName; ADOConnection1.Connected := True; ADOConnection1.GetTableNames(ComboBox1.Items,False); ComboBox1.Text := ''; end end; procedure TForm1.BitBtn3Click(Sender: TObject); begin close; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin if ComboBox1.Text <> '' then begin Hoja := ComboBox1.Text; AdoDataSet1.Close; ADODataSet1.CommandText := Hoja; AdoDataSet1.Open; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin AdoDataSet1.Close; ADOConnection1.Connected := False; end; end.
Al ADOConnection le asigne su propiedad LoginPrompt a False. Te adjunto una imagen de los componentes que utilice.
Salud OS
PD: lo único que podría cambir por alguna incompatibilidad de versión con excel es cambiar el "Provider=Microsoft.Jet.OLEDB.4.0" que se está usando, ahora no tengo el dato exacto pero debe ser la versión lo que cambia
Archivos adjuntos
#11
Escrito 07 febrero 2010 - 06:35
Sale un mensaje diciendo que el formato de archivo no es el esperado. Lo que tu decias.
El formato del libro Excel es:
'Hoja de cálculo de Microsoft Office Excel 97-2003'.
Saludos.
#12
Escrito 07 febrero 2010 - 09:05
Hola egostar, el programa rompe al abrir el libro excel.
Sale un mensaje diciendo que el formato de archivo no es el esperado. Lo que tu decias.
El formato del libro Excel es:
'Hoja de cálculo de Microsoft Office Excel 97-2003'.
Saludos.
En la línea de conección cambia "Excel 8.0" por "Excel 6.0"
Saludos.
#13
Escrito 10 febrero 2010 - 11:40
No se pudo encontrar el archivo ISAM instalable.
#14
Escrito 10 febrero 2010 - 11:47
"Provider=Micros oft.Jet.OLEDB.4.0;Data Source=c:\archivo.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1'"
Archivo.xls deberás cambiarlo por la ruta y archivo que deseas abrir.
Salud OS
#15
Escrito 10 febrero 2010 - 12:16
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Archivo.xls;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
Las secciones realmente imprescindibles son:
Provider=Microsoft.Jet.OLEDB
Jet OLEDB:Engine Type=35
Datasource= .... nombre y ruta de tu archivo Excel ....
Pero mejor prueba con todo, puesto que así a mi me funciona perfectamente.
#16
Escrito 12 febrero 2010 - 04:06
'select * from hoja1$' y no la acepta.
Saludos.
#17
Escrito 12 febrero 2010 - 04:19
Hola Marc, me pide una cadena para la propiedad command text del dataset. Le he puesto:
'select * from hoja1$' y no la acepta.
Saludos.
En el commandtext solo tienes que poner el nombre de la hoja.
CommandText := 'hoja1$';
Fijate en el procedimiento que puse en el código que publiqué.
procedure TForm1.ComboBox1Change(Sender: TObject); begin if ComboBox1.Text <> '' then begin Hoja := ComboBox1.Text; // Hoja solo tiene el nombre de la hoja, no tiene ninguna sentencia SQL AdoDataSet1.Close; ADODataSet1.CommandText := Hoja; AdoDataSet1.Open; end; end;
¿ Si estás utilizando un ADODataSet ?
Salud OS
#18
Escrito 27 marzo 2010 - 11:04
#19
Escrito 28 marzo 2010 - 07:36
Eso de que "tampoco funciona" no nos ayuda a ninguno.
Si es posible, puedes publicar la estructura y/o datos de tu hoja excel y para terminar de comprender, tu código delphi que tienes.
Gracias.
#20
Escrito 28 marzo 2010 - 07:50