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<>nil then
begin
try
TempTable:=TClientDataSet.Create(Application);
TempTable.FieldDefs.Assign(AFieldDefs);
TempTable.CreateDataSet;
Result:=(TempTable as TDataSet);
Except
if TempTable<>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(′Value′,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