Jump to content


Photo

copiar registros de tablas DBF de visual fox pro con ADO


  • Please log in to reply
10 replies to this topic

#1 luis_chendo

luis_chendo

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 06 June 2013 - 12:18 PM

Hola a todos, y de nuevo gracias, pues todos sus consejos han sido de mucha ayuda.

Tengo ahora un programa entre manos, que debe realizar lo siguiente:
Copiar los registros de una tabla a otra (las tablas son iguales, los mismos campos), las cuales son de visual fox pro.
las logre abrir con TDBF, pero ese no es el punto.
Las tablas estan en distintas rutas de la computadora y lo que busco es que se copien los registros de una a otra automaticamente y sin que se repitan.
¿se puede hacer con una ADOQuery?
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 06 June 2013 - 04:38 PM


¿se puede hacer con una ADOQuery?


Es posible, para ello debes hacer referencia a la ruta del objeto. Nunca lo he hecho con foxpro pero con access podría ser algo así:


  AdoQuery.sql.text := 'INSERT INTO 'c:\dirtodabatase'.tabladestino  SELECT * FROM origen";


quiero pensar que con foxpro podría hacerse así:

AdoQuery.sql.text := 'INSERT INTO tabla IN 'RUTA AL ARCHIVO destino'  SELECT * FROM origen";

  • 0

#3 luis_chendo

luis_chendo

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 07 June 2013 - 10:28 AM

Gracias por el aporte pero no funciono, a lo mejor y estoy haciendo algo mal, cale las dos, esta es una:


delphi
  1. INSERT INTO datos
  2. SELECT * FROM datos In 'C:\Consii\12000000_12821001\'


  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 07 June 2013 - 10:54 AM

Y si se usan dos conexiones, una configurada a cada ruta de las bases de datos y con dos TADOQuerys, uno enlazado a una conexión que obtenga los datos a copiar, y el otro enlazado a la otra conexión y se encargue de la carga de los datos ???

No sé, se me ocurre...  :D :D :D

:angel:

Saludox ! :)
  • 0

#5 luis_chendo

luis_chendo

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 07 June 2013 - 11:11 AM

suena factible fenareth, solo que en lo que ando medio perdido es en la sql de la adoquery :s como enlazo entonces las adoquerys??
  • 0

#6 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 07 June 2013 - 12:08 PM

Por ejemplo:



delphi
  1. Conexion1: TADOConnection;  //Conectado a Base1
  2. Conexion2: TADOConnection;  //Conectado a Base2
  3.  
  4. QueryConsulta: TADOQuery;  //con conexión a Conexion1
  5. QueryInserta: TADOQuery;    //con conexión a Conexion2



Y tal vez en un botón, en su evento OnClick:



delphi
  1. var
  2.   i: Integer;
  3. begin
  4.         QueryConsulta.Close;  // Consulta que obtiene valores de la base de datos 1
  5.         QueryConsulta.sql.Text := 'select campo1, campo2, campo3 from tabla where condiciones';
  6.         QueryConsulta.Open;
  7.         QueryConsulta.First;
  8.  
  9.         for i := 0 to QueryConsulta.RecordCount - 1 do
  10.         begin
  11.             QueryInserta.sql.Text := 'insert into tabla (campo1, campo2, campo3) values ('+QueryConsulta.Fields[0].AsString+','+QueryConsulta.Fields[1].AsString+','+QueryConsulta.Fields[2].AsString+')';
  12.             QueryInserta.ExecSQL;  // Query que inserta en la tabla de la base de datos 2
  13.            
  14.             QueryConsulta.Next;  // Siguiente registro
  15.         end;
  16. end;



Saludox ! :)




  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 07 June 2013 - 12:21 PM

Gracias por el aporte pero no funciono, a lo mejor y estoy haciendo algo mal, cale las dos, esta es una:


delphi
  1. INSERT INTO datos
  2. SELECT * FROM datos In 'C:\Consii\12000000_12821001\'



que error lanza...
  • 0

#8 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 637 posts
  • LocationCiudad de México

Posted 10 June 2013 - 10:27 AM

Por si te interesa, tengo en mi blog algo de abrir DBFs con CDX desde delphi

Saludos!!

http://gfernando.blo...mpirulando.html


  • 0

#9 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 10 June 2013 - 10:37 AM

Por si te interesa, tengo en mi blog algo de abrir DBFs con CDX desde delphi

Saludos!!

http://gfernando.blo...mpirulando.html


:o Mapache resucitado? :p
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 10 June 2013 - 12:02 PM

Por si te interesa, tengo en mi blog algo de abrir DBFs con CDX desde delphi

Saludos!!

http://gfernando.blo...mpirulando.html


Orale, de nuevo a las andanzas mi buen Mapache, un gustazo ver tu blog en linea de nuevo (y)

Saludos
  • 0

#11 luis_chendo

luis_chendo

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 10 June 2013 - 01:28 PM

Muchas gracias a todos por sus respuestas, he intentado resolverlo pero aun no he tenido mucho avance, lo que intento hacer es ir buscando los archivos de bases de datos de vfp, y luego unirlas a una principal, todas tienen los mismos campos.
me conecto con adoquerys
tome como base el modelo que publico Fenareth para la consulta.



delphi
  1. procedure TForm1.Buscar(Lista: TStringList; Path, Mascara: String);
  2.  
  3. var
  4.   SR: TSearchRec;
  5.   direccionbd:String;
  6.   i : integer;
  7. begin
  8.   modulodatos.TDataModule4.Create(Self);
  9.   Path:= IncludeTrailingPathDelimiter(Path);
  10.   if FindFirst(Path + '*.*', faAnyfile, SR) = 0 then
  11.   repeat
  12.     if (SR.Name <>  '.') and (SR.Name <> '..') then
  13.       if (SR.Attr and faDirectory) = faDirectory then
  14.         Buscar(Lista,Path+SR.Name,Mascara);
  15.   until FindNext(SR) <> 0;
  16.   FindClose(SR);
  17.   if FindFirst(Path + Mascara, faAnyfile, SR) = 0 then
  18.   repeat
  19.     if (SR.Name <>  '.') and (SR.Name <> '..') then
  20.       if (SR.Attr and faDirectory) <> faDirectory then
  21.       //(Path + SR.Name);
  22.       modulodatos.DataModule4.ADOQuery1.Close;
  23.       modulodatos.DataModule4.ADOQuery1.sql.Text := 'select * from datos';
  24.       modulodatos.DataModule4.ADOQuery1.Open;
  25.       modulodatos.DataModule4.ADOQuery1.First;
  26.       modulodatos.DataModule4.queryinserta.Active:=False;
  27.       modulodatos.DataModule4.queryinserta.ConnectionString:='Provider=VFPOLEDB.1;Data Source='+Path+SR.Name+';Mode=ReadWrite|Share Deny None;Password="";Collating Sequence=MACHINE';
  28.       modulodatos.DataModule4.queryinserta.Active:=True;
  29.       for i := 0 to modulodatos.DataModule4.ADOQuery1.RecordCount - 1 do
  30.         begin
  31.             modulodatos.DataModule4.queryinserta.sql.Text:= 'insert into datos ('+modulodatos.DataModule4.queryinserta.Fields[0].AsString+','+modulodatos.DataModule4.queryinserta.Fields[1].AsString+','+modulodatos.DataModule4.queryinserta.Fields[2].AsString+','+modulodatos.DataModule4.queryinserta.Fields[3].AsString+','+modulodatos.DataModule4.queryinserta.Fields[4].AsString+','+modulodatos.DataModule4.queryinserta.Fields[5].AsString+','+modulodatos.DataModule4.queryinserta.Fields[6].AsString+','+modulodatos.DataModule4.queryinserta.Fields[7].AsString+','+modulodatos.DataModule4.queryinserta.Fields[8].AsString+','+modulodatos.DataModule4.queryinserta.Fields[9].AsString+','+modulodatos.DataModule4.queryinserta.Fields[10].AsString+','+modulodatos.DataModule4.queryinserta.Fields[11].AsString+','+modulodatos.DataModule4.queryinserta.Fields[12].AsString+','
  32. +modulodatos.DataModule4.queryinserta.Fields[13].AsString+','+modulodatos.DataModule4.queryinserta.Fields[14].AsString+','+modulodatos.DataModule4.queryinserta.Fields[15].AsString+','+modulodatos.DataModule4.queryinserta.Fields[16].AsString+','+modulodatos.DataModule4.queryinserta.Fields[17].AsString+','+modulodatos.DataModule4.queryinserta.Fields[18].AsString+','+modulodatos.DataModule4.queryinserta.Fields[19].AsString+','+modulodatos.DataModule4.queryinserta.Fields[20].AsString+','+modulodatos.DataModule4.queryinserta.Fields[21].AsString+','+modulodatos.DataModule4.queryinserta.Fields[22].AsString+','
  33. +modulodatos.DataModule4.queryinserta.Fields[23].AsString+','+modulodatos.DataModule4.queryinserta.Fields[24].AsString+','+modulodatos.DataModule4.queryinserta.Fields[25].AsString+','+modulodatos.DataModule4.queryinserta.Fields[26].AsString+','+modulodatos.DataModule4.queryinserta.Fields[27].AsString+','+modulodatos.DataModule4.queryinserta.Fields[28].AsString+','+modulodatos.DataModule4.queryinserta.Fields[29].AsString+','+modulodatos.DataModule4.queryinserta.Fields[30].AsString+','+modulodatos.DataModule4.queryinserta.Fields[31].AsString+','+modulodatos.DataModule4.queryinserta.Fields[32].AsString+','
  34. +modulodatos.DataModule4.queryinserta.Fields[33].AsString+','+modulodatos.DataModule4.queryinserta.Fields[34].AsString+','+modulodatos.DataModule4.queryinserta.Fields[35].AsString+','+modulodatos.DataModule4.queryinserta.Fields[36].AsString+')';
  35.  
  36.             //DataModule1.IBQueryInsertarClientes.ParamByName('cli_id').Value:=DataModule1.IBQueryCargaClientes2.FieldByName('cli_id').Value;
  37.             modulodatos.DataModule4.queryinserta.ExecSQL;  // Query que inserta en la tabla de la base de datos 2
  38.             modulodatos.DataModule4.ADOQuery1.Next;  // Siguiente registro
  39.             //modulodatos.DataModule4.Dbf1.InsertRecord();
  40.         end;
  41.  
  42.         // aqui la consol
  43.   until FindNext(SR) <> 0;
  44.   FindClose(SR);
  45.   ShowMessage('Se han concluido la consolidacion');
  46. end;





delphi
  1. Buscar(Lista2,'C:\consii\','SII.BDC');



no me marca ningun error  pero no copia los registros.
gracias de antemano por sus sugerencias y ayuda.
  • 0




IP.Board spam blocked by CleanTalk.