2010-09-25 24 views
7

在Delphi for Win32中,如何以本地方式讀取和寫入dbf文件,而不使用BDE?我知道網絡中有一些組件可用,但我從未使用過任何組件,所以我不知道如何選擇(如果有的話)。如何以本地方式讀寫dbf?

回答

14

您可以使用ADO訪問DBF文件

見的部份示例代碼(使用TAdoConnectionTAdoDataSet組件)。

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; 
+1

+1開箱即用的德爾福解決方案 – 2010-09-26 07:50:36

+0

這隻適用於我的目的 – eKek0 2010-09-27 00:30:10

+0

錯誤:「網絡或磁盤錯誤」:( – 2017-08-24 20:43:56

0

如果您不需要索引,則不難讀取DBF文件。格式非常簡單。一個頭部跟着固定大小的寄存器。每個寄存器中都有一個標誌,表示它是否被刪除。我建議尋找一個你想要的組件。你可以找到一些in Torry's Delphi pages

1

在我開始使用Firebird之前,我曾多次使用Software Science的Topaz。它總是一個優秀的圖書館,有一個了不起的手冊和良好的技術支持。它支持索引,甚至還有內存選項。我認爲這將是一個不錯的選擇。

+0

不幸的是我最近發現(在我已經花了太多的時間在轉換代碼之後)它不支持NULL值。它們根據字段類型自動轉換爲空字符串或0。這個缺失的功能使得Topaz對我來說毫無價值。 :-(現在我已經申請了他們的「60天退款」優惠,希望他們能夠堅持下去,所以至少我可以拿回100美元,時間已經流失了。 – dummzeuch 2011-08-20 11:23:33

+0

我真的很抱歉不適合當我定期處理他們時,他們是一個非常專業的以客戶爲導向的公司,我希望你的經驗和我的經驗一樣好,再次,我很抱歉,我指出你在一個盲人的小巷。 – jrodenhi 2011-08-22 20:46:23

+0

jrodenhi:這當然不是你的錯,在我已經確定Topaz沒有做我想做的事情之後,我才發現你的答案,我發表了這個評論,讓其他人意識到這個缺點,所以他們不會像我那樣浪費太多時間 – dummzeuch 2011-08-23 07:36:06

1
+1

我使用過這個,但移植到TDBF,主要是因爲速度原因,儘管哈在這種情況下,ving購買了Apollo – 2010-09-27 12:29:25

8

當我還在使用DBF文件(一些傳統應用程序)時,我使用了TDBF。我仍然使用它來維護這些和那裏的應用程序。它是免費的,有很多功能,並且效果很好。

+0

「free」,意思是LGPL。對商業應用程序不好。 – dummzeuch 2011-08-20 11:25:51

+0

爲什麼它不適合商業應用?如果您修改它,您只需要發佈TDBF源;否則你可以鏈接代碼.. – reiniero 2013-03-26 07:58:10

+1

如果你*靜態*鏈接它,你不僅要提供tdbf源代碼,而且要提供程序的完整源代碼。爲了動態鏈接tdbf,你必須使用包。 – dummzeuch 2013-06-30 17:22:04

0

ADO沒有爲我工作,但我設法用打開我的DBF文件BDE:

從數據訪問(或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'。 Active = True。

你知道下一步該怎麼做