1

首先,我必须声明,当谈到 Delphi 时,我是一个完全的新手,虽然我在 14 年前在学校做过一些 Turbo Pascal 编程......

我有一个商业 Delphi 程序,它使用 dBase 数据库和 BDE 来访问它们。我基本上需要将另一个用 C# 编写的应用程序连接到这个数据库,以便能够执行 SQL 操作,例如选择、插入、更新和删除。

不幸的是,针对 dBase 使用 OLEDB 会导致索引损坏,似乎只有本机 BDE 应用程序能够安全地访问数据。

总体思路是创建一个简单的 Delphi 控制台应用程序,它可以从标准输入 (Read/ReadLn) 读取 SQL 语句并将 CSV 数据输出到标准输出 (WriteLn)。

我该怎么做呢?

我已经使用以下代码成功地获得了简单的 TTable 访问权限:

tbl := TTable.Create(nil);

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

WriteLn(tbl.RecordCount);

tbl.Active := False;

有没有办法我可以通过直接执行 SQL 语句来实现相同的目标?

4

3 回答 3

8

您可以使用 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;
于 2010-07-11T02:41:29.660 回答
4

正如 Serg 已经写的:您可以使用 tquery 对象在 dbase 表上执行 sql 查询。但请注意:您建议这样做的方式 - 通过标准输入将 sql 查询传递给程序并让它在标准输出上返回结果 - 在 Windows 上非常慢。

此外,如果查询结果很大,您将不得不向程序添加额外的命令以批量返回数据。在 Delphi 中编写 COM 服务器并使用 C# 可能更容易,并且会给您更好的性能。

最后一点:BDE 多年来一直没有得到 Borland/Codegear/Embarcadero 的支持。它仍然有效,但保持这种状态变得越来越难,尤其是对于比 XP 更新的 Windows 版本。一种替代方法可能是 tdbf(参见 sourceforge),但我没有足够的经验来给你一个明智的意见。

于 2010-07-11T10:28:51.767 回答
0

由于BDE自 10 年前被弃用以来一直没有得到维护:

您是否考虑过 Advantage Database Server?它是一个可以访问dBase、Clipper和其他xBase的服务器

它工作得非常好,并且有一个可用的.NET 数据提供程序

这将使您的解决方案路径变得不那么复杂。

——杰伦

于 2010-07-24T11:20:14.027 回答