Ir al contenido



Foto

Base de datos Excel


  • Por favor identifícate para responder
33 respuestas en este tema

#1 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 05 febrero 2010 - 11:12

Hola, sabe alguien cómo abrir un libro de Excel en un grid de Delphi7?
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.
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 05 febrero 2010 - 11:16

¿intentaste colocar la propiedad Login Prompt del componente connection que usas en False?.
  • 0

#3 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 05 febrero 2010 - 11:27

No sólo he puesto un ttable y un dbgrid en una ventana.
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.
  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 05 febrero 2010 - 11:33

Hola jacapu !... Porqué no intentas colocando un TDataBase y lo relacionas con tu alias del DBE...

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 ! :D
  • 0

#5 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 05 febrero 2010 - 12:21

Tampoco funciona
  • 0

#6 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

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 ! :D
  • 0

#7 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 05 febrero 2010 - 12:40

Hola
Aqui hay un ejemplo que aunque este hecho en Visual Basico creo que se puede pasar a delphi.
Este es usando Ado.

Saludos
  • 0

#8 kafastoforman

kafastoforman

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 277 mensajes
  • LocationMexico D.F.

Escrito 05 febrero 2010 - 12:46

Que tal Jacpu, no lo has intentado hacer con ADO?

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.

  • 0

#9 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 06 febrero 2010 - 05:57

Tampoco funciona.
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.019 mensajes
  • LocationMéxico

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.



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Panel1: TPanel;
  12.     Label1: TLabel;
  13.     BitBtn1: TBitBtn;
  14.     ComboBox1: TComboBox;
  15.     BitBtn3: TBitBtn;
  16.     DBGrid1: TDBGrid;
  17.     DataSource1: TDataSource;
  18.     ADODataSet1: TADODataSet;
  19.     ADOConnection1: TADOConnection;
  20.     OpenDialog1: TOpenDialog;
  21.     procedure BitBtn1Click(Sender: TObject);
  22.     procedure ComboBox1Change(Sender: TObject);
  23.     procedure BitBtn3Click(Sender: TObject);
  24.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  25.     procedure ADOConnection1BeforeConnect(Sender: TObject);
  26.   private
  27.     { Private declarations }
  28.   public
  29.     { Public declarations }
  30.   end;
  31.  
  32. var
  33.   Form1: TForm1;
  34.   Archivo,Hoja: String;
  35.  
  36. implementation
  37.  
  38. {$R *.dfm}
  39.  
  40. procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject);
  41. begin
  42.   ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
  43.                                       'Data Source='+Archivo+
  44.                                       ';Extended Properties=Excel 8.0;'+
  45.                                       'Persist Security Info=False';
  46. end;
  47.  
  48. procedure TForm1.BitBtn1Click(Sender: TObject);
  49. begin
  50.   if OpenDialog1.Execute then
  51.   begin
  52.     AdoDataSet1.Close;
  53.     ADOConnection1.Connected := False;
  54.     Archivo := OpenDialog1.FileName;
  55.     ADOConnection1.Connected := True;
  56.     ADOConnection1.GetTableNames(ComboBox1.Items,False);
  57.     ComboBox1.Text := '';
  58.   end
  59. end;
  60.  
  61. procedure TForm1.BitBtn3Click(Sender: TObject);
  62. begin
  63.   close;
  64. end;
  65.  
  66. procedure TForm1.ComboBox1Change(Sender: TObject);
  67. begin
  68.   if ComboBox1.Text <> '' then
  69.   begin
  70.     Hoja := ComboBox1.Text;
  71.     AdoDataSet1.Close;
  72.     ADODataSet1.CommandText := Hoja;
  73.     AdoDataSet1.Open;
  74.   end;
  75. end;
  76.  
  77. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  78. begin
  79.   AdoDataSet1.Close;
  80.   ADOConnection1.Connected := False;
  81. end;
  82.  
  83. 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


  • 0

#11 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 07 febrero 2010 - 06:35

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.
  • 0

#12 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

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.
  • 0

#13 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 10 febrero 2010 - 11:40

Al seleccionar el libro de Excel en el opendialog1 y clikar aceptar aparece el siguiente mensaje:
No se pudo encontrar el archivo ISAM instalable.
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.019 mensajes
  • LocationMéxico

Escrito 10 febrero 2010 - 11:47

Intenta con esta linea en tu conexión a excel.

"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
  • 0

#15 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 10 febrero 2010 - 12:16

Esta es la cadena de conexión que utilizo yo para acceder a Excel mediante ADO

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.
  • 0

#16 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 12 febrero 2010 - 04:06

Hola Marc, me pide una cadena para la propiedad command text del dataset. Le he puesto:
'select * from hoja1$' y no la acepta.
Saludos.
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.019 mensajes
  • LocationMéxico

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é.



delphi
  1. procedure TForm1.ComboBox1Change(Sender: TObject);
  2. begin
  3.   if ComboBox1.Text <> '' then
  4.   begin
  5.     Hoja := ComboBox1.Text; // Hoja solo tiene el nombre de la hoja, no tiene ninguna sentencia SQL
  6.     AdoDataSet1.Close;
  7.     ADODataSet1.CommandText := Hoja;
  8.     AdoDataSet1.Open;
  9.   end;
  10. end;



¿ Si estás utilizando un ADODataSet ?

Salud OS
  • 0

#18 jacapu

jacapu

    Member

  • Miembros
  • PipPip
  • 41 mensajes

Escrito 27 marzo 2010 - 11:04

Tampoco funciona. Yo sólo quiero convertir un libro de excel en formato de tabla Paradox o consulta SQL para poder trabajar con los datos del libro excel desde el entorno de delphi.
  • 0

#19 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 28 marzo 2010 - 07:36

Saludos.

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.
  • 0

#20 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 28 marzo 2010 - 07:50

¿Seguro que la hoja tiene por nombre Hoja1?
  • 0