Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Conectar a BD access desde delphi 6 (https://www.clubdelphi.com/foros/showthread.php?t=40674)

Giniromero 23-02-2007 15:01:04

Conectar a BD access desde delphi 6
 
Hola a todos,

el problema es basicamente lo que pongo en el titulo de la consulta. Como conectar desde delphi 6 a una base de datos access.

Por desgracia, tenemos un programa que migra datos sólo a access, y quiero pasar luego esos datos a nuestra BD IB.

El problema es que no consigo conectar correctamente a access desde delphi.

Se agradecerá cualquier ayudita,

Muchas gracias a todos,

Virginia

marcoszorrilla 23-02-2007 15:42:30

Si utilizas los componentes ADO no tendrás ningún problema, tienen por ejemplo uno AdoTable con un asistente para crear la conexción directamente a cualquier tabla.

Un Saludo.

Giniromero 23-02-2007 17:09:42

Muchas gracias,

lo probaré

Virginia

Giniromero 27-02-2007 15:58:04

Hola,

tras las instrucciones que me disteis para usar ADO en Delphi 6, efectivamente he conseguido ver datos de la tabla en cuestion, el problema me surge cuando tengo que guardar datos, de una tabla ADO, a la de IB.

Me explicaré. Tengo este código:

Código:

//===============================
    //========Tomamos los datos desde access a la tabla TODO


    //=======copiamos los registros de una tabla a la otra
    FrmDmodule.TbADOAsisImport.first;
    //mientras no llegue al final de los registros
    WHILE not FrmDmodule.TbADOAsisImport.EOF DO BEGIN
   
 
      With FrmDmodule.TbIBAsistencia_todo do begin

        FrmDmodule.TbIBAsistencia_todo.Insert;


        FieldByName('CODIGO').Value := FrmDmodule.TbADOAsisImportCODIGO.Value;
        FieldByName('GRUPO').Value := FrmDmodule.TbADOAsisImportGRUPO.Value;
        FieldByName('FECHA').Value := FrmDmodule.TbADOAsisImportFECHA.Value;
        FieldByName('NUMALU1').Value := FrmDmodule.TbADOAsisImportNUMALU1.Value;
        FieldByName('ASISTENCIA1').Value := FrmDmodule.TbADOAsisImportASISTENCIA1.Value;


        FieldByName('NUMALU2').Value := FrmDmodule.TbADOAsisImportNUMALU2.Value;
        FieldByName('ASISTENCIA2').Value := FrmDmodule.TbADOAsisImportASISTENCIA2.Value;

        FieldByName('NUMALU3').Value := FrmDmodule.TbADOAsisImportNUMALU3.Value;
        FieldByName('ASISTENCIA3').Value := FrmDmodule.TbADOAsisImportASISTENCIA3.Value;

        FieldByName('NUMALU4').Value := FrmDmodule.TbADOAsisImportNUMALU4.Value;
        FieldByName('ASISTENCIA4').Value := FrmDmodule.TbADOAsisImportASISTENCIA4.Value;

        FieldByName('NUMALU5').Value := FrmDmodule.TbADOAsisImportNUMALU5.Value;
        FieldByName('ASISTENCIA5').Value := FrmDmodule.TbADOAsisImportASISTENCIA5.Value;

        FieldByName('NUMALU6').Value := FrmDmodule.TbADOAsisImportNUMALU6.Value;
        FieldByName('ASISTENCIA6').Value := FrmDmodule.TbADOAsisImportASISTENCIA6.Value;

        FieldByName('NUMALU7').Value := FrmDmodule.TbADOAsisImportNUMALU7.Value;
        FieldByName('ASISTENCIA7').Value := FrmDmodule.TbADOAsisImportASISTENCIA7.Value;

        FieldByName('NUMALU8').Value := FrmDmodule.TbADOAsisImportNUMALU8.Value;
        FieldByName('ASISTENCIA8').Value := FrmDmodule.TbADOAsisImportASISTENCIA8.Value;

        FieldByName('NUMALU9').Value := FrmDmodule.TbADOAsisImportNUMALU9.Value;
        FieldByName('ASISTENCIA9').Value := FrmDmodule.TbADOAsisImportASISTENCIA9.Value;

        FieldByName('NUMALU10').Value := FrmDmodule.TbADOAsisImportNUMALU10.Value;
        FieldByName('ASISTENCIA10').Value := FrmDmodule.TbADOAsisImportASISTENCIA10.Value;

        FieldByName('NUMALU11').Value := FrmDmodule.TbADOAsisImportNUMALU11.Value;
        FieldByName('ASISTENCIA11').Value := FrmDmodule.TbADOAsisImportASISTENCIA11.Value;

        FieldByName('NUMALU12').Value := FrmDmodule.TbADOAsisImportNUMALU12.Value;
        FieldByName('ASISTENCIA12').Value := FrmDmodule.TbADOAsisImportASISTENCIA12.Value;

        FrmDmodule.TbIBAsistencia_todo.Post;

        END;


      End;  //With
      FrmDmodule.TbADOAsisImport.next;

    END;//While del TbADOAsisImport
   
   

 
    //Cerramos tablas
      FrmDmodule.TbADOAsisImport.close;
    FrmDmodule.IBTransHyperion.CommitRetaining;

Donde la tabla TbADOAsisImport es la que tiene los datos que quiero pasar a IB, y la que los tiene que recoger es la tabla TbIBAsistencia_todo.

El problema viene al copiar el último registro de la tabla de ADO a la de IB. No es necesario que todos los campos tengan datos, (no se obliga a la BD Access que así sea), pero si en el último registro, no encuentra datos para un campo concreto, ¡¡¿copia los del registro inmediatamente superior????!!!! para rellenar esos vacios??????!!!!
Si el registro que no tiene datos en todos los campos, NO es el último, todo funcionará OK

Esto es así justo cuando pasa por el Post, antes de pasar por el "next"

He puesto para que vaya mostrandome los valores cada pasada, y antes del post ya da el problema.

Por favor, alguien puede ayudarme, no se que hacer con este tema.

Muchas gracias,


virginia

Lepe 27-02-2007 17:14:16

Cita:

Empezado por Giniromero
pero si en el último registro, no encuentra datos para un campo concreto, ¡¡¿copia los del registro inmediatamente superior????!!!! para rellenar esos vacios??????!!!!

Pues lamento decir que no tiene explicación alguna lo que dices. ¿No tendrás en el beforePost de la tabla IB o bien en el afterScroll de la tabla ADO algún código?

Porque vamos, sin hacer explicitamente un .Prior o .Next es imposible que salte del registro actual al anterior.

Saludos

Giniromero 27-02-2007 18:26:23

he mirado y no, no tengo nada en esos eventos. ¿algo en la configuración del objeto?
Estoy usando un TADOQuery, pero tambien he probado con TADODataSet.

Esto es lo que tengo:

Código:

object TbADOAsisImport: TADOQuery
  Active = True
  Connection = ADOBDHyperion
  CursorType = ctStatic
  Parameters = <>
  SQL.Strings = (
    'select  *  from asistencias_todo'
    'order by codigo')
  Left = 544
  Top = 152
  object TbADOAsisImportcodigo: TAutoIncField
    FieldName = 'codigo'
    ReadOnly = True
  end
  object TbADOAsisImportgrupo: TIntegerField
    FieldName = 'grupo'
  end
  object TbADOAsisImportfecha: TWideStringField
    FieldName = 'fecha'
    Size = 50
  end
  object TbADOAsisImportnumalu1: TWideStringField
    FieldName = 'numalu1'
    Size = 50
  end
  object TbADOAsisImportasistencia1: TWideStringField
    FieldName = 'asistencia1'
    Size = 50
  end
  object TbADOAsisImportnumalu2: TWideStringField
    FieldName = 'numalu2'
    Size = 50
  end
  object TbADOAsisImportasistencia2: TWideStringField
    FieldName = 'asistencia2'
    Size = 50
  end
  object TbADOAsisImportnumalu3: TWideStringField
    FieldName = 'numalu3'
    Size = 50
  end
  object TbADOAsisImportasistencia3: TWideStringField
    FieldName = 'asistencia3'
    Size = 50
  end
  object TbADOAsisImportnumalu4: TWideStringField
    FieldName = 'numalu4'
    Size = 50
  end
  object TbADOAsisImportasistencia4: TWideStringField
    FieldName = 'asistencia4'
    Size = 50
  end
  object TbADOAsisImportnumalu5: TWideStringField
    FieldName = 'numalu5'
    Size = 50
  end
  object TbADOAsisImportasistencia5: TWideStringField
    FieldName = 'asistencia5'
    Size = 50
  end
  object TbADOAsisImportnumalu6: TWideStringField
    FieldName = 'numalu6'
    Size = 50
  end
  object TbADOAsisImportasistencia6: TWideStringField
    FieldName = 'asistencia6'
    Size = 50
  end
  object TbADOAsisImportnumalu7: TWideStringField
    FieldName = 'numalu7'
    Size = 50
  end
  object TbADOAsisImportasistencia7: TWideStringField
    FieldName = 'asistencia7'
    Size = 50
  end
  object TbADOAsisImportnumalu8: TWideStringField
    FieldName = 'numalu8'
    Size = 50
  end
  object TbADOAsisImportasistencia8: TWideStringField
    FieldName = 'asistencia8'
    Size = 50
  end
  object TbADOAsisImportnumalu9: TWideStringField
    FieldName = 'numalu9'
    Size = 50
  end
  object TbADOAsisImportasistencia9: TWideStringField
    FieldName = 'asistencia9'
    Size = 50
  end
  object TbADOAsisImportnumalu10: TWideStringField
    FieldName = 'numalu10'
    Size = 50
  end
  object TbADOAsisImportasistencia10: TWideStringField
    FieldName = 'asistencia10'
    Size = 50
  end
  object TbADOAsisImportnumalu11: TWideStringField
    FieldName = 'numalu11'
    Size = 50
  end
  object TbADOAsisImportasistencia11: TWideStringField
    FieldName = 'asistencia11'
    Size = 50
  end
  object TbADOAsisImportnumalu12: TWideStringField
    FieldName = 'numalu12'
    Size = 50
  end
  object TbADOAsisImportasistencia12: TWideStringField
    FieldName = 'asistencia12'
    Size = 50
  end
end

Código:

object OLD_TbADOAsisImport: TADODataSet
  Connection = ADOBDHyperion
  CursorType = ctStatic
  LockType = ltReadOnly
  CommandText = 'select  *  from asistencias_todo'#13#10'order by codigo'#13#10
  Parameters = <>
  Prepared = True
  Left = 536
  Top = 96
  object OLD_TbADOAsisImportcodigo: TAutoIncField
    FieldName = 'codigo'
    ReadOnly = True
  end
  object OLD_TbADOAsisImportgrupo: TIntegerField
    FieldName = 'grupo'
  end
  object OLD_TbADOAsisImportfecha: TWideStringField
    FieldName = 'fecha'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu1: TWideStringField
    FieldName = 'numalu1'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia1: TWideStringField
    FieldName = 'asistencia1'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu2: TWideStringField
    FieldName = 'numalu2'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia2: TWideStringField
    FieldName = 'asistencia2'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu3: TWideStringField
    FieldName = 'numalu3'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia3: TWideStringField
    FieldName = 'asistencia3'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu4: TWideStringField
    FieldName = 'numalu4'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia4: TWideStringField
    FieldName = 'asistencia4'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu5: TWideStringField
    FieldName = 'numalu5'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia5: TWideStringField
    FieldName = 'asistencia5'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu6: TWideStringField
    FieldName = 'numalu6'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia6: TWideStringField
    FieldName = 'asistencia6'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu7: TWideStringField
    FieldName = 'numalu7'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia7: TWideStringField
    FieldName = 'asistencia7'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu8: TWideStringField
    FieldName = 'numalu8'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia8: TWideStringField
    FieldName = 'asistencia8'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu9: TWideStringField
    FieldName = 'numalu9'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia9: TWideStringField
    FieldName = 'asistencia9'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu10: TWideStringField
    FieldName = 'numalu10'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia10: TWideStringField
    FieldName = 'asistencia10'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu11: TWideStringField
    FieldName = 'numalu11'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia11: TWideStringField
    FieldName = 'asistencia11'
    Size = 50
  end
  object OLD_TbADOAsisImportnumalu12: TWideStringField
    FieldName = 'numalu12'
    Size = 50
  end
  object OLD_TbADOAsisImportasistencia12: TWideStringField
    FieldName = 'asistencia12'
    Size = 50
  end
end

Código:

object ADOBDHyperion: TADOConnection
  Attributes = [xaCommitRetaining]
  Connected = True
  ConnectionString =
    'Provider=MSDASQL.1;Persist Security Info=False;Data Source=Hyper' +
    'ion;Mode=ReadWrite'
  IsolationLevel = ilIsolated
  LoginPrompt = False
  Mode = cmReadWrite
  Left = 536
  Top = 24
end


Muchas gracias,


Virginia

Giniromero 28-02-2007 17:54:37

Muchas gracias a todos por la ayuda, al final lo que he hecho ha sido conectar a esa base de datos access mediante BDE, en vez de ADO, y me ha dejado de hacer cosas raras.... lo digo por si alguien se encuentra en el mismo problema, que no se de golpes contra la misma pared que yo.

Gracias de nuevo a todos,

Virginia


La franja horaria es GMT +2. Ahora son las 07:40:40.

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