¿Cuál es una buena manera de acceder a los archivos de DBASE utilizando BDE y Delphi?

StackOverflow https://stackoverflow.com/questions/3221364

  •  13-09-2020
  •  | 
  •  

Pregunta

En primer lugar, debo afirmar que soy un NewB completo cuando se trata de Delphi, aunque hice una programación turbo Pascal en la escuela, hace unos catorce años ...

Tengo un programa comercial de Delphi que utiliza la base de datos DBASE y BDE para acceder a ellos.Básicamente, necesito interactuar otra aplicación escrita en C # a esta base de datos, para poder hacer operaciones SQL, como seleccionar, insertar, actualizar y eliminar.

Lamentablemente usando OLEDB contra DBASE Resultados en índices rotos, solo las aplicaciones de BDE nativas parecen poder acceder a los datos de manera segura.

La idea general era crear una aplicación de consola de Delphi simple que pudiera leer las declaraciones SQL de los datos de entrada estándar (lectura / readln) y de salida CSV a la salida estándar (WRITELN).

¿Cómo voy a hacer esto?

He conseguido con éxito el acceso simple a TTABLE a trabajar, con el siguiente código:

tbl := TTable.Create(nil);

tbl.DatabaseName := 'Exceline';
tbl.TableName := 'KUNDE.DBF';
tbl.Active := True;

WriteLn(tbl.RecordCount);

tbl.Active := False;

¿Hay alguna manera de lograr lo mismo pero al ejecutar declaraciones de SQL directas?

¿Fue útil?

Solución

Puede hacer lo mismo con el componente de cómplete:

qry := TQuery.Create(nil);

qry.DatabaseName := 'Exceline';
qry.SQL.Add('SELECT COUNT(*) AS CNT FROM KUNDE');
qry.Active := True;

WriteLn(qry.FieldByName('CNT').AsString);

qry.Active := False;

Otros consejos

Como Serging ya escribió: puede usar un objeto de cómputo para ejecutar las consultas SQL en las tablas DBASE.Pero tenga cuidado: la forma en que propones para hacer eso, que pase una consulta SQL a un programa a través de STDIN y que devuelva los resultados en STDOUT, es muy lento en Windows.

Además, deberá agregar comandos adicionales a su programa para devolver los datos en lotes si el resultado de una consulta es enorme. Probablemente sea más fácil y le brindará mucho mejor rendimiento para escribir un servidor COM en Delphi, un uso que desde C #.

y un último punto: el BDE no ha sido respaldado por Borland / CodeGear / Embarcadero durante varios años.Todavía funciona, pero se vuelve más difícil y es más difícil mantenerlo así, especialmente con versiones más nuevas de Windows que XP.Una alternativa podría ser TDBF (ver SourceForge), pero no tengo experiencia con eso para darle una opinión informada sobre ella.

Desde la bde no se ha mantenido ya que estaba en desuso de hace 10 años:

¿Se consideró servidor de base de datos de ventaja ?Es un servidor que puede acceder a DBASE, CLIPPER y otra XBase

Funciona realmente bien, y hay una .NET Proveedor de datosdisponible para ello .

Eso haría que su ruta de solución sea mucho menos compleja.

- Jeroen

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top