Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-01-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Exportar de Interbase a tabla Access

Hola otra vez,
necesito algun ejemplillo ó manual donde encuentre como exportar datos de interbase a una tabla de Access, me gustaría hacerlo utilizando el Pallette Server de Delphi 6, pero si tengo que hacerlo con conexión ADO ó de alguna otra forma tampoco me importa.

Además me gustaría que la exportación me valiese para cualquier Access 97, 2000, XP.

Muchas gracias por su ayuda en este y en todos los casos anteriores.
Responder Con Cita
  #2  
Antiguo 18-01-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por VRO
...me gustaría hacerlo utilizando el Pallette Server de Delphi 6, pero si tengo que hacerlo con conexión ADO ó de alguna otra forma tampoco me importa.

Además me gustaría que la exportación me valiese para cualquier Access 97, 2000, XP.
Justo creo que te será más sencillo hacerlo vía ADO que hacerlo con la paleta SERVERS.
(1) Pon un form con lo necesario para las dos conexiones (ADO: ADOConnection + ADOTable) y similar para la de IB/FB.
(2) Se trata de ir leyendo de uno y escribiendo en otro.

En cuanto a la segunda cuestión, justo con ADO conseguirás la independencia de la versión de Access, cosa que no es seguro si utilizas la paleta Servers.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 19-01-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Gracias por la ayuda, codigo mas sencillo ó rapido

Gracias Neftalí por tu rapida respuesta, así lo he hecho con conexión ADO para lo que he naufragado en la busqueda y he encontrado muchos hilos que tratan del tema, acontinuación cito el código utilizado por si ha alguien le sirve de ayuda, ya que he creado la base de datos directamente desde Delphi 6, lo cito porque esto sólo lo he encontrado en un hilo para facilitar la busqueda:

Primero comento lo que hace el codigo:

Crea la base de datos desde delphi con código, para ello,en el menú de Delphi voy a Projecti-> Importar TYpe Librery e importo la librería "Microsoft ADO ext. 2.1 for DLL and Security (versión 2.1)" después pulso "Create Unit " y pongo el código que después detallaré.
El código comprueba que esa base de datos no esté creada ya, si no está creada la crea , crea tambiñén la tabla y realiza el paso de datos.si la base da datos está creada ya, comprueba que la tabla no esté creada, si es así(no está creada) la crea y pasa lo datos, si está creada sólo pasa los datos (lo que viene acontinuación falta de hacer) sólo los datos que no estén ya introducidos.

Para haccer el codigo utilizo una conexion TADOConnection (llamada ADOConnect) y un query TADOQuery(llamado ADOQ) todo de la pestaña ADO de Delphi y un IBQuery de la pestaña Interbase (llamdo dlecturas).Os ruego que si se os ocurre una forma más rapida ó sencilla de hacer lo descrito con ADO me lo comuniqueis, por favor.
Código Delphi [-]

procedure TForm1.Exportardatos1Click(Sender: TObject);
const
  DATABASENAME='C:\Archivos de programa\agua\datos\exportar.mdb';
var
   catalog:_catalog;
        ConnectionString:String;
begin

   //Creamos el objeto catalogo
   Catalog:=CreateComObject(StringToGUID('ADOX.Catalog')) as _Catalog;
   //Cadena de conexión
   ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ DATABASENAME;
   try
    //Create new Access database por primera vez
    Catalog.Create(ConnectionString);
    //Conectamos con la base de datos creada.
    datos.ADOConnect.ConnectionString:=ConnectionString+';Persist Security Info=False';
    datos.ADOConnect.Connected:=true;
    //Creamos la tabla texportar.
    datos.ADOQ.SQL.Clear;
    datos.ADOQ.SQL.Add('Create table texportar(contador int not null,fecha date not null,lectura float, consumo float, primary key(contador,fecha))');
    datos.ADOQ.Open;

    datos.dlecturas.First;
    while datos.dlecturas.Eof=false do
     begin
       datos.ADOQ.SQL.Clear;
       datos.ADOQ.SQL.Add('insert into texportar(contador,fecha,lectura,consumo)values('+ datos.dlecturas.fieldbyname('numero').text+','+FormatDateTime('dd/mm/yy',datos.dlecturas.fieldbyname('fecha').asFloat)+','+datos.dlecturas.fieldbyname('lectura').text+',  '+datos.dlecturas.fieldbyname('consumo').text+')');
       datos.ADOQ.Open;

       datos.dlecturas.Next;
     end;
   except
    on E:EOLEException do begin
    //Levantamos la excepcion, si existe la base da datos, creamos la tabla y
    //pasamos los datos
        if Trim(E.Message)='La base de datos ya existe' then
         begin
           datos.ADOConnect.ConnectionString:=ConnectionString+';Persist Security Info=False';
           datos.ADOConnect.connected:=true;
           try
             datos.ADOQ.SQL.Clear;
             datos.ADOQ.SQL.Add('Create table texportar(contador int not null,fecha date not null,lectura float,consumo float, primary key(contador,fecha))');
             datos.ADOQ.Open;

             datos.dlecturas.First;
             while datos.dlecturas.Eof=false do
              begin
               datos.ADOQ.SQL.Clear;
               datos.ADOQ.SQL.Add('insert into texportar(contador,fecha,lectura,consumo)values('+datos.dlecturas.fieldbyname('numero').text+','+For  matDateTime('mm/dd/yy',datos.dlecturas.fieldbyname('fecha').AsDateTime)+','+datos.dlecturas.fieldbyname('lectura').text  +','+datos.dlecturas.fieldbyname('consumo').text+')');
               datos.ADOQ.Open;

               datos.dlecturas.Next;
              end;
            except
             on E:EOLEException do begin
             //Volvamos a lanzar otra excepcion si ya existe la tabla, pasamos datos
               if Trim(E.Message)='La tabla ''texportar'' ya existe' then
                begin
                  datos.dlecturas.First;
                  while datos.dlecturas.Eof=false do
                   begin
                       datos.ADOQ.SQL.Clear;
                       datos.ADOQ.SQL.Add('insert into texportar(contador,fecha,lectura,consumo)values('+datos.dlecturas.fieldbyname('numero').text+','+For  matDateTime('mm/dd/yy',datos.dlecturas.fieldbyname('fecha').AsDateTime)+','+datos.dlecturas.fieldbyname('lectura').text  +','+datos.dlecturas.fieldbyname('consumo').text+')');
                       datos.ADOQ.Open;

                       datos.dlecturas.Next;
                   end;
                end
               else
                messageDLG('Error al crear la base de datos; Mensaje:'+ E.Message,mtError,[mbOk],0);
             end;
            end;
         end
    else
      messageDLG('Error al crear la base de datos; Mensaje:'+ E.Message,mtError,[mbOk],0);
   end;
  end;
end;

Nota: me he dado cuenta que cuando crea la tabla ó
mete datos da un error que dice:
"ADOQ:CommandTex does not return a result set."
Estoy investigando a ver porque da ese error ya que
creo haberlo visto resuleto en un hilo, no obstante si sabeis
porque es os ruego me lo comuniqueis.

Pues lo dicho espero que le sirva a alguien,aunque debe sufrir alguna modificación que cuando esté terminada añadiré a este hilo.

Gracias por todo

Última edición por VRO fecha: 19-01-2005 a las 19:18:59.
Responder Con Cita
  #4  
Antiguo 20-01-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo te recomiendo que hagas las comprobaciones de existencuia tanto de la Base de Dats como de las tablas antes de ejecutar, en lugar de realizarlas en el tratamiento de excepciones; Con ésto conseguiras evitar código duplicado y más seguridad (por la comprobación del mensaje de las excepciones -eso no es muy seguro-).

Para la de la Base de Datos como es un archivo Access puedes usar FileExists y para la tabla el método GetTableNames del ADO Connection.

El código sería algo así:

Código Delphi [-]
 procedure TForm1.Button2Click(Sender: TObject);
 const
   DATABASENAME='C:\Archivos de programa\agua\datos\exportar.mdb';
 var
   TS:TStringList;
   Index:Integer;
 begin
 
   // Existe la Base de Datos?
   if FileExists(DATABASENAME) then begin
     // EXISTE
     // ...
   end
   else begin
     // NO EXISTE
     // ...
   end;
 
   // Crear la lista
   TS := TStringList.Create();
   TS.Sorted := True;
 
   // proteccion para liberar
   try
 
     // Recuperar nombres de tablas
     ADOConnection1.GetTableNames(TS, False);
 
     // Existe la tabla ?
     if TS.Find('texportar', Index) then begin
       // EXISTE
       //...
     end
     else begin
       // NO EXISTE
       //...
     end;
 
   finally
     TS.Free;
   end;  
 
 end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:50:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi