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