Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Importar tablas Dbf a base de datos Access desde delphi (https://www.clubdelphi.com/foros/showthread.php?t=63026)

yusnerqui 26-01-2009 21:27:39

Importar tablas Dbf a base de datos Access desde delphi
 
Saludos amigos del foro, primero que nada agradecerles por leer mi post y ofrecer disculpas por mi prolongada ausencia, no me voy a justificar, ni explicaré causas que, si bien influyen, no determinan, solo ofrezco mis disculpas :)

El problema que me trae es el siguiente: estoy implementando una herramienta cuyo fin es auditar un sistema contable, este sistema está hecho en foxpro con sus correspondientes tablas dbf.

Lo primero que necesito para que mi sistema trabaje es importar las tablas dbf a una base de datos de Microsoft Access para con esa copia importada realizar la auditoría. Y es precisamente esto lo que no he logrado hacer desde delphi.

Hasta el momento lo que he resuelto es hacer el proceso desde el propio Access, creando un módulo que haga uso de la métodoTransferDatabase del objeto DoCmd y luego ejecutándolo desde delphi, esto tiene los inconvenientes siguientes:
1- Tiene que estar access instalado
2- El efecto visual es muy desagradable, pues literalmente te abre el access para ejecutar el modulo.

Lo que necesito es poder hacer la importación desde el propio delphi o que el proceso de ejecutar el módulo no sea tan "molesto" para el usuario.

Reiterando mi agradecimiento por leer el post los saluda

Yusnerqui Valdivia

droguerman 26-01-2009 21:56:17

Puedes optar por usar componentes BDE y luego cada registro leido del dataset escribirlo a un dataset de access tipo ADO (con un bucle por ejemplo) o leer directamente los dbf con algún componente, yo he utilizado este con muy buenos resultados

yusnerqui 26-01-2009 23:41:20

Muchas gracias por responder, siertamentes es una solución y probablemente la mejor que tengamos a mano, de lo que desconfío un poco es del tiempo que empleará la aplicación en tranferir cíclicamene tooodos los datos de toooodas las tablas del mencionado sistema, pues suele ser bastante grande el número de registros a importar y son un total de 33 tablas diferenes.

De todos modos probaré tu propuesta y luego les cuento, pretendo usar los componentes kadaos que he probado con muy buenos resultados en la manipulación de bases de datos access y parecen tener bunas potencialidades en el manejo de dbf.

De todos modos si alguien tiene otra posible solución a este problema, el hilo queda abierto a su criterio.


Muchas gracias al amigo droguerman y a todo el que ha leido este post

Neftali [Germán.Estévez] 27-01-2009 10:00:38

Otra opción (similar a la que te han comentado) es saltarte el BDE y hacer ambas conexiones utilizando ADO, ya que mediante ADO también puedes configurar una conexión para tablas DBF.

Código:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;Password=;

yusnerqui 30-01-2009 17:40:17

Bueno pues lo dicho, muchas muchas gracias, aún no he podido implementar nada pero ya tengo al menos el camino a seguir, desde que tenga un poquitin de tiempo me pongo manos a la obra.

Saludos Yusnerqui

yusnerqui 23-02-2009 20:58:24

Hola muchachos revivo este hilo porque ya tengo el proceso de importación prácticamente terminado de la forma que me sugirireron, excepto que en vés de usar:

Código Delphi [-]
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;Password=;
porque no me funcionaba usé:

Código Delphi [-]
'Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE '+
'Files;Initial Catalog=c:\folder';
Esto me permite abrir los dbf de fox en cualquier máquina sin problemas con un simple select * from tabla

El problema ahora es que necesito en algunas de esas tablas solo importa los registros correspondientes a un rango de fecha, y no me deja poner el criterio o lo que es lo mismo no me lo acepta

Código Delphi [-]
var
FechaIni,FechaTer:TDate;
begin
FechaIni:= //una fecha guardada en una tabla de configuaracion
FechaTer:=//otra fecha guardada en la tabla de configuaracion
ADOConnection1.Close;
         ADOConnection1.ConnectionString:=
          'Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE '+
          'Files;Initial Catalog=c:\folder';
         ADOConnection1.Open;
         //abro el dbf
         DBF.Close;
         DBF.SQL.Text := 'select * from '+Tabla;
         if Auxi.fieldbyname('fecha').AsString='' then
         begin
           DBF.SQL.Text := format('%s where %s >= :F1 and %1:s <= :F2',
                       [DBF.SQL.Text,'CampoFecha']);
           DBF.Parameters[0].Value:=fechaini;
           DBF.Parameters[1].Value:=fechater;
         end;
         DBF.Open;

esto no me da error pero no me debuelve ningun registro:confused:
Tampoco me ha funcionado pasarlo directo en la consulta, tampoco encerrandolo entre yabes {} no se realmente que hacer.

Lo que me queda pensar es que usando este modo de conección no puedo hacer otra cosa que leer toda la tabla.

Agradesco cualquier comentario al respecto que me ayude.

Saludos y gracias por leer este hilo

pgraciap 25-08-2010 23:10:02

Que tal compañero yusnerqui, yo tambien he tenido ese problema con las fechas y es que al revisar las fechas me encuentro que no es la fecha que supuestamente se escribe mas bien me da algo parecido a :"25/'08/2009 13:34:45PM" y en realidad lo que busco es "25/08/2009" y lo que se me ocurrio es poner la variable a modo txt y que solo pasaran los datos de las fechas no mas y asi me funciono bien, no se si has tratado de checarlo asi???? espero te funcione....

Saludos... :D :)


La franja horaria es GMT +2. Ahora son las 04:42:23.

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