Что такое хороший способ доступа к файлам dBase с использованием BDE и Delphi?

Прежде всего, я должен заявить, что я полный новичок, когда дело доходит до 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 ответа

Решение

Вы можете сделать то же самое, используя компонент 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;

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

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

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

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

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

Он работает очень хорошо, и для него доступен поставщик данных.NET.

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

--jeroen

Другие вопросы по тегам