用Delphi 開發數據庫程序經驗三則

1.建立臨時表

數據輸入是開發數據庫程序的必然環節。在Client/Server結構中,客戶端可能要輸入一批數據後,再向服務器的後台數據庫提交,這就需要在本地(客戶端)建立臨時數據表來存儲用戶輸入的數據,待提交後,清除本地表數據。

這種方法的好處是:提高輸入效率,減小網絡負擔。

由于用戶一次輸入的數據量一般情況下較小(不會超過幾百條記錄),所以臨時表可以建立在內存中,這樣處理速度較快。

方法1:使用查詢控件(TQuery)

第1步:在窗體上放上查詢控件(TQuery),設置好所連接的數據表。

第2步:使TQuery. CachedUpdates=True;

TQuery. RequestLive=True

第3步:在原有的SQL語句後加入一條Where子語句,要求加入這條Where子語句後SQL查詢結果爲空。

例如:

SELECT Biolife.″Species No″, Category, Common_Name, Biolife.″Species Name″, Biolife.″Length (cm)″, Length_In, Notes, Graphic

FROM ″biolife.db″ Biolife

where Biolife.Category=′A′ and Biolife.Category=′B′

這樣臨時表就建立完成了。

方法2:使用代碼創建臨時表

代碼如下:

function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;

var

TempTable:TClientDataSet;

begin

TempTable:=nil;

Result:=nil;

if AFieldDefs$#@60;$#@62;nil then

begin

try

TempTable:=TClientDataSet.Create(application);

TempTable.FieldDefs.Assign(AFieldDefs);

TempTable.CreateDataSet;

Result:=(TempTable as TDataSet);

Except

if TempTable$#@60;$#@62;nil then

TempTable.Free;

Result:=nil;

raise;

end

end

end;

在程序中按如下方法使用:

PRocedure TForm1.Button1Click(Sender: TObject);

var

ADataSet:TDataSet;

begin

ADataSet:=TDataSet.Create(Self);

with ADataSet.FieldDefs do

begin

Add(′Name′,ftString,30,False);

Add(′ ue′,ftInteger,0,False);

end;

with DataSource1 do

begin

DataSet:=CreateTableInMemory(ADataSet.FieldDefs);

DataSet.Open;

end;

ADataSet.Free;

end;

臨時表創建完成。

方法1使用簡單,但由于利用查詢控件,清空數據時需要查詢服務器後台數據庫,所以速度稍慢,而且不適用于臨時表中各個字段由數個數據表的字段拼湊而成的情況。方法2適用範圍廣、速度快,但需要編寫代碼。(代碼中TFieldDefs的使用方法十分簡單,見Delphi的聯機幫助)。

2.配置數據引擎(BDE、SQL Link)

有關數據庫程序分發時,需要攜帶數據引擎(BDE、SQL Link),並且在客戶端安裝完程序後還需要配置數據引擎,如用戶名(username)、密碼(PassWord)等等。假如手工配置的話,工作量比較大(根據客戶機數量而定)。

而InstallShield For Delphi又似乎沒有這方面的選項,其實InstallShield For Delphi可以做到,在生成安裝程序的目錄裏有一個*.iwz的文本文件,只要在[IDAPI Alias]片段中手工加入即可。 例如:

[IDAPI Alias]

usesname=SYSDBA

password=masterkey

安裝程序後數據引擎自動配置完畢。

3.在InterBase數據庫中使用函數

程序員可能在用InterBase作爲後台數據庫時,會爲其提供的函數過少而感到不方便(只有四個),無法方便地編寫出複雜的存儲過程。InterBase本身無法編寫函數,但它可以使用外部函數(調用DLL中的函數)。下例中說明如何在InterBase 中聲明SUBSTR函數。

DECLARE EXTERNAL FUNCTION SUBSTR

CSTRING(80), SMALLINT, SMALLINT

RETURNS CSTRING(80)

ENTRY_POINT ″IB_UDF_substr″ MODULE_NAME ″ib_udf″

其中:MODULE_NAME爲DLL的名稱,ENTRY_POINT爲函數名。

聲明後便可以使用,例如:

select SUBSTR(country)

from country

本例使用的是Delphi安裝時自帶的IBLocal數據庫。用戶也可以自己編寫函數來擴充InterBase。

用Delphi 開發數據庫程序經驗三則
更多內容請看數據庫相關文章專題,或

 
開發數據庫程序經驗三則
1.建立臨時表   數據輸入是開發數據庫程序的必然環節。在Client/Server結構中,客戶端可能要輸入一批數據後,再向服務器的後台數據庫提交,這就需要在本地(客戶端)建立臨時數據表來存儲用戶輸入的數據,待提交後...查看完整版>>開發數據庫程序經驗三則
 
Delphi編寫數據庫程序要點(一)
  Delphi是著名的Borland公司開發的可視化軟件開發工具。有這樣一句話最爲經典、貼切的描述了Delphi——“真正的程序員用C,聰明的程序員用Delphi”。很多人把Delphi稱爲是第四代編程語言,它...查看完整版>>Delphi編寫數據庫程序要點(一)
 
JAVA程序開發小經驗 - 使用ObjectStream會出現的問題
  1. ObjectInputStream與ObjectOutputStream的順序問題在網絡通訊中,主機與客戶端若使用ObjectInputStream與ObjectOutputStream建立對象通訊,必須注重聲明此兩個對象的順序。如:主機端先建立ObjectInputStream...查看完整版>>JAVA程序開發小經驗 - 使用ObjectStream會出現的問題