Что такое хороший способ доступа к файлам dBase с использованием BDE и Delphi? - PullRequest
1 голос
/ 11 июля 2010

Прежде всего, я должен заявить, что я полный новичок, когда речь заходит о Delphi, хотя я занимался программированием в Turbo Pascal в школе, около четырнадцати лет назад ...

У меня есть коммерческая программа Delphi, которая использует базу данных dBase и BDE для доступа к ним. Мне в основном нужно связать другое приложение, написанное на C #, с этой базой данных, чтобы иметь возможность выполнять операции SQL, такие как выбор, вставка, обновление и удаление.

К сожалению, использование OLEDB против dBase приводит к повреждению индексов, и только нативные приложения BDE могут безопасно получать доступ к данным.

Общая идея состояла в том, чтобы создать простое консольное приложение Delphi, которое могло бы читать операторы SQL из стандартного ввода (Read / ReadLn) и выводить данные CSV в стандартный вывод (WriteLn).

Как бы я поступил так?

Я успешно получил простой TTable-доступ к работе со следующим кодом:

tbl := TTable.Create(nil);

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

WriteLn(tbl.RecordCount);

tbl.Active := False;

Есть ли способ, которым я мог бы достичь того же, но вместо этого выполняя прямые операторы SQL?

Ответы [ 3 ]

8 голосов
/ 11 июля 2010

Вы можете сделать то же самое, используя компонент TQuery:

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;
4 голосов
/ 11 июля 2010

Как уже писал Серг: Вы можете использовать объект запроса для выполнения запросов sql к таблицам dbase.Но будьте осторожны: способ, которым вы предлагаете сделать это - передача запроса sql программе через stdin и возвращение результатов на stdout - очень медленный в Windows.

Кроме того, вам придется добавить дополнительные командыв вашу программу для возврата данных в пакетном режиме, если результат запроса огромен.Вероятно, это будет проще и даст вам гораздо лучшую производительность для написания COM-сервера в Delphi с использованием C #.

И еще один момент: BDE не поддерживается Borland / Codegear / Embarcadero в течение нескольких лет.Это все еще работает, но все сложнее и сложнее его сохранить, особенно с более новыми версиями Windows, чем XP.Одной из альтернатив может быть tdbf (см. Sourceforge), но у меня недостаточно опыта, чтобы дать вам обоснованное мнение по этому поводу.

0 голосов
/ 24 июля 2010

Поскольку BDE не поддерживается, так как он устарел 10 лет назад:

Рассматривали ли вы Сервер баз данных Advantage ? Это сервер, который может получить доступ к dBase, Clipper и другим xBase

Он работает очень хорошо, и для него доступен .NET Data Provider .

Это сделает ваш путь решения намного менее сложным.

- Йерун

...