使用BDE和Delphi访问dBase文件的好方法是什么?

时间:2010-07-11 00:21:07

标签: delphi bde dbase

首先,我必须声明,对于Delphi来说,我是一个完整的新手,虽然我在学校做了一些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语句来实现相同的目标?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

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

此外,如果查询结果很大,您必须向程序添加其他命令以批量返回数据。 它可能更容易,并且可以为您在Delphi中编写COM服务器提供更好的性能,这是C#的用法。

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

答案 2 :(得分:0)