Ver Mensaje Individual
  #3  
Antiguo 19-01-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Reputación: 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