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)
-   -   ADO y DBF (https://www.clubdelphi.com/foros/showthread.php?t=72465)

darkone2k4 21-02-2011 01:53:16

ADO y DBF
 
Salu2 amigos.

Estoy desarrollando un programa que tiene que obtener datos de unos archivos DBF e insertarlos en un archivo MDB.
Pero tengo problemas para conectarme con los DBF, ya que éstos están en varias carpetas, por ejemplo:
  • C:\Sistema\DBF Datos principales del sistema.
  • C:\Sistema\DBF01 Datos de la empresa 1.
  • C:\Sistema\DBF02 Datos de la empresa 2.
Tengo un ADOConnection que usa un DNS de sistema para conectarse a la carpeta principal, pero después no puedo conectar a las otras carpetas ya que me aparece el siguiente error:

Error no esperado desde el controlador de la base de datos externa (12294)

Intenté usando otro ADOConecction junto a otra query, pero no hay caso.

Ojalá y puedan ayudarme.

SAlu2.


Neftali [Germán.Estévez] 21-02-2011 10:24:38

Sólo para descartar problemas.
¿Has probado en diseño a conectarte el la Tabla DBF que te da problemas?
¿El error es sólo en ejecución?

Otra opción es que utilices ADO directamente para conectarte a las tablas DBF a ver si el problema es debido al método de conexión.

darkone2k4 21-02-2011 13:46:00

gracias por la respuesta Neftali.

Te explico un poco lo que tengo en mi formulario.

1.- Tengo un ADOConnection + un ADOQuery para obtener el nombre y código de la empresa, tomando los datos que están en c:\sistema\dbf, que es donde están los datos generales del sistema. Esos datos son enviados a un ComboBox.
2.- Tengo otro ADOCOnnection y otro ADOQuery para obtener los datos específicos de la empresa seleccionada, que puede ser c:\sistema\dbf01 o c:\sistema\dbf02 de acuerdo a un rango de fechas, por lo que tengo un botón de búsqueda para dicha información.

Lo primero que se debe hacer en la aplicación, es seleccionar la empresa del combobox para que me de la ruta desde donde obtener la información específica y luego ingresar el rango de fecha para buscar. Entonces modifico en tiempo de ejecución el connectionstring del segundo ADOConnection para que la búsqueda se realice en la carpeta correspondiente.

Entonces el problema se presenta cuando se realiza la búsqueda de información de acuerdo al rango de fecha.

En tiempo de diseño no se presenta ningún problema.
Voy a probar con la información que aparece en el link que me diste.

gracias por tu respuesta.

Neftali [Germán.Estévez] 21-02-2011 13:49:28

Cita:

Empezado por darkone2k4 (Mensaje 391524)
...Entonces modifico en tiempo de ejecución el connectionstring del segundo ADOConnection para que la búsqueda se realice en la carpeta correspondiente.

Entonces el problema se presenta cuando se realiza la búsqueda de información de acuerdo al rango de fecha.

En tiempo de diseño no se presenta ningún problema.

Asegúrate de que la cadena de conexión y la SQL son correctas.
No debería haber diferencia entre activarla en diseño y en ejecución. Ejecuta el programa pasa a paso y confirma que los valores de la cadena de conexión son correctos. Haz una prueba en diseño con esa misma cadena de conexión.

darkone2k4 21-02-2011 14:02:27

gracias nuevamente.

El primer ADOCOnnection, lo tengo así:
Código Delphi [-]
'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=gestion_comercial;DBQ=C:\sistema\DBF;DefaultDir=C:\sistema\DBF;DriverId=533;FIL=dBas  e 5.0;MaxBufferSize=2048;PageTimeout=5;"';

Y funciona bien la conexión.
El segundo ADOConnection, lo tengo así( de acuerdo a la página que me diste):

Código Delphi [-]
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Ruta + ';Extended Properties=dBASE IV;User ID=Admin;Password=;';
Donde ruta, es la variable que me da la ubicación de las tablas a usar.

No quiero depender de un DSN, y cambié la connectionstring del primer ado para usarla como aparece en la página que me diste, y me aparece el mismo error.

salu2.


Neftali [Germán.Estévez] 21-02-2011 15:50:25

Cita:

Empezado por darkone2k4 (Mensaje 391528)
El segundo ADOConnection, lo tengo así( de acuerdo a la página que me diste):

Donde ruta, es la variable que me da la ubicación de las tablas a usar.


Prueba esa segunda opción poniendo en diseño la ruta correcta donde tienes las tablas y comprueba si funcionba, para descartar que sea un error en ejecución.

darkone2k4 21-02-2011 16:03:29

Cita:

Empezado por Neftali (Mensaje 391535)
Prueba esa segunda opción poniendo en diseño la ruta correcta donde tienes las tablas y comprueba si funcionba, para descartar que sea un error en ejecución.

ingreso eso en el connectionstring, le doy a active: true y se conecta bien, pero me lo cambia a:
Código Delphi [-]
'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=c:\sistema\dbf;Mode=Share Deny None;Extended Properties=dBASE IV;'+
'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=17;Jet OLEDB:Database Locking Mode=0;'+
'Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";'+
'Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;'+
'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'
Luego al query lo asocio al ado, le doy active = true y me da el mismo error.
Todo esto, en tiempo de diseño.




Neftali [Germán.Estévez] 21-02-2011 16:45:53

Cita:

Empezado por darkone2k4 (Mensaje 391538)

(1)...ingreso eso en el connectionstring, le doy a active: true y se conecta bien, pero me lo cambia a

(2)Luego al query lo asocio al ado, le doy active = true y me da el mismo error.

Bueno, es normal que lo cambie, añade determinados parámetros, lo importante es que conecta bien (1).
Al asociar el Query (2) dices que falla.

Quedaría saber qué consulta tienes en el Query.

darkone2k4 21-02-2011 17:37:19

En el query solo tengo:

Código SQL [-]
select * from empresa

Donde empresa es el archivo empresa.dbf, el cual existe.

darkone2k4 22-02-2011 03:06:21

Ya lo solucioné.

Dejaré la solución por si alguien más tiene el mismo problema.

El problema se debía a la cadena de conexión que estaba usando, que era:
Código Delphi [-]
'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=gestion_comercial;DBQ=C:\sistema\DBF;DefaultDir=C:\sistema\DBF;DriverId=533;FIL=dBas  e 5.0;MaxBufferSize=2048;PageTimeout=5;"';
No me permitía cambiar en tiempo de ejecución ni el DSN ni la ruta, por lo que utilicé esta cadena de conexión:
Código Delphi [-]
'Provider=VFPOLEDB.1;Data Source=' + Ruta + ';Password="";Collating Sequence=MACHINE';
Para usar esta nueva cadena de conexión, tuve que descargar el VFPOLEDB desde la página de MS.

Así que ahora puedo cambiar sin problemas las rutas de búsqueda de datos y no dependo de los DSN.

Muchas gracias Neftalí por la ayuda.

Salu2.

waly2k1 13-06-2011 09:26:22

Conx a VF
 
Hola flaco, pasame por favor un ej. de conx, solo la cadena de conx
que estoy en lo mismo y no logro conectarme, la conx me dice que está bien
pero a la query no la puedo activar, ya me habia bajado el oledb actualizado de MS, pero nada aun.
Saludos y muchas gracias!!!

Edito: El error que me da es que no encuentra la base de datos "datos.dbc" y Datos es la carpeta donde están las DBF/CDX
y no una BD, se entiende?

Nuevamente gracias!


La franja horaria es GMT +2. Ahora son las 00:50:10.

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