在 Delphi for Win32 中,如何在没有 BDE 的情况下以本机方式读写 dbf 文件?我知道网络上有一些可用的组件,但我从未使用过其中任何一个,所以我不知道该选择哪个(如果有的话)。
6 回答
您可以使用 ADO 访问 DBF 文件
请参阅示例代码(使用TAdoConnection
和TAdoDataSet
组件)。
var
dbf_folder : string;
begin
dbf_folder:='c:\bdd';//set your dbf folder location here
ADOConnection1.LoginPrompt:=false;
ADOConnection1.ConnectionString:=Format('Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;Extended Properties=dBase IV;',[dbf_folder]);
try
ADOConnection1.Connected:=True;
ADODataSet1.CommandText:='Select * from file.dbf'; //make your SQL query using the name of the dbf file
ADODataSet1.Open;
while not ADODataSet1.eof do
begin
//do your stuff here
//ADODataSet1.FieldByName('').AsString
ADODataSet1.Next;
end;
except
on E : Exception do
ShowMessage(E.Message);
end;
end;
当我还在处理 DBF 文件(一些遗留应用程序)时,我使用了 TDBF 。我仍然使用它来维护这些应用程序。它是免费的,有很多功能并且效果很好。
在开始使用 Firebird 之前,我使用了 Software Science 的Topaz多年。它一直是一个优秀的图书馆,有很棒的手册和良好的技术支持。它支持索引,甚至还有一个内存选项。我认为这将是一个不错的选择。
ADO 对我不起作用,但我设法使用 BDE 打开了我的 dbf 文件:
从数据访问(或 BDE,取决于您的 Delphi 版本)部分,我放置了一个 TDataBase 和 TTable 组件(如果您愿意,可以使用 TQuery)。
通过双击 TDataBase 组件,我打开了设置对话框。用 'db_name' 填充名称字段(名称是任意的),驱动程序名称 = 'STANDARD',参数字段:'PATH=C:\Path\To\DBF_FILES\'。然后我设置 Connected=True。
然后在 TTable 组件中我设置 DatabaseName = 'db_name' - 我在 TDataBase 组件中设置的那个。并且 TableName 属性设置位于指定文件夹中的“DB_FILE.dbf”。活动 = 真。
你知道下一步该做什么
如果不需要索引,读取 DBF 文件并不难。格式非常简单。固定大小的寄存器后面跟着一个标题。每个寄存器中都有一个标志,指示它是否被删除。我建议寻找一个可以满足您需求的组件。您可以在 Torry 的 Delphi 页面中找到一些。