建立臨時表
數據輸入是開發數據庫程序的必然環節
在Client/Server結構中
客戶端可能要輸入一批數據後
再向服務器的後台數據庫提交
這就需要在本地(客戶端)建立臨時數據表來存儲用戶輸入的數據
待提交後
清除本地表數據
這種方法的好處是
提高輸入效率
減小網絡負擔
由於用戶一次輸入的數據量一般情況下較小(不會超過幾百條記錄)
所以臨時表可以建立在內存中
這樣處理速度較快
方法
使用查詢控件(TQuery)
第
步
在窗體上放上查詢控件(TQuery)
設置好所連接的數據表
第
步
使TQuery
CachedUpdates=True;
TQuery
RequestLive=True
第
步
在原有的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′
這樣臨時表就建立完成了
方法
使用代碼創建臨時表
代碼如下
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 TForm
Button
Click(Sender: TObject);
var ADataSet:TDataSet;
begin
ADataSet:=TDataSet
Create(Self);
with ADataSet
FieldDefs do
begin
Add(′Name′
ftString
False);
Add(′Value′
ftInteger
False);
end;
with DataSource
do
begin
DataSet:=CreateTableInMemory(ADataSet
FieldDefs);
DataSet
Open;
end;
ADataSet
Free;
end;
臨時表創建完成
方法
使用簡單
但由於利用查詢控件
清空數據時需要查詢服務器後台數據庫
所以速度稍慢
而且不適用於臨時表中各個字段由數個數據表的字段拼湊而成的情況
方法
適用范圍廣
速度快
但需要編寫代碼
(代碼中TFieldDefs的使用方法十分簡單
見Delphi的聯機幫助)
配置數據引擎(BDE
SQL Link)
有關數據庫程序分發時
需要攜帶數據引擎(BDE
SQL Link)
並且在客戶端安裝完程序後還需要配置數據引擎
如用戶名(username)
密碼(Password)等等
如果手工配置的話
工作量比較大(根據客戶機數量而定)
而InstallShield For Delphi又好像沒有這方面的選項
其實InstallShield For Delphi可以做到
在生成安裝程序的目錄裡有一個*
iwz的文本文件
只要在[IDAPI Alias]片段中手工加入即可
例如
[IDAPI Alias]
usesname=SYSDBA
password=masterkey
安裝程序後數據引擎自動配置完畢
在InterBase數據庫中使用函數
程序員可能在用InterBase作為後台數據庫時
會為其提供的函數過少而感到不方便(只有四個)
無法方便地編寫出復雜的存儲過程
InterBase本身無法編寫函數
但它可以使用外部函數(調用DLL中的函數)
下例中說明如何在InterBase 中聲明SUBSTR函數
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(
)
SMALLINT
SMALLINT
RETURNS CSTRING(
)
ENTRY_POINT ″IB_UDF_substr″ MODULE_NAME ″ib_udf″
其中
MODULE_NAME為DLL的名稱
ENTRY_POINT為函數名
聲明後便可以使用
例如
select SUBSTR(country)
from country
本例使用的是Delphi安裝時自帶的IBLocal數據庫
用戶也可以自己編寫函數來擴充InterBase
</SPA !-sse>
From:http://tw.wingwit.com/Article/program/Delphi/201401/30260.html