明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

臨時表創(chuàng)建

[摘要]數(shù)據(jù)輸入是開發(fā)數(shù)據(jù)庫程序的必然環(huán)節(jié)。在Client/Server結構中,客戶端可能要輸入一批數(shù)據(jù)后,再向服務器的后臺數(shù)據(jù)庫提交,這就需要在本地(客戶端)建立臨時數(shù)據(jù)表來存儲用戶輸入的數(shù)據(jù),待提交后,清除本地數(shù)據(jù)表。這種方法的好處是:提高輸入效率,減小網(wǎng)絡負擔。   由于用戶一次輸入的數(shù)據(jù)量一般情況...
數(shù)據(jù)輸入是開發(fā)數(shù)據(jù)庫程序的必然環(huán)節(jié)。在Client/Server結構中,客戶端可能要輸入一批數(shù)據(jù)后,再向服務器的后臺數(shù)據(jù)庫提交,這就需要在本地(客戶端)建立臨時數(shù)據(jù)表來存儲用戶輸入的數(shù)據(jù),待提交后,清除本地數(shù)據(jù)表。這種方法的好處是:提高輸入效率,減小網(wǎng)絡負擔。

  由于用戶一次輸入的數(shù)據(jù)量一般情況下較小(不會超過幾百條記錄),所以臨時表可以建立在內(nèi)存中,這樣處理速度較快。臨時表創(chuàng)建有如下兩種方法:

 1.使用查詢控件創(chuàng)建臨時表
  第1步:在窗體上放入查詢控件(TQuery),并設置好所連接的數(shù)據(jù)表。
  第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.使用代碼創(chuàng)建臨時表
  函數(shù)代碼如下:
  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;
  在程序中按如下方法調(diào)用:
  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;
  這樣,臨時表就創(chuàng)建完成。
  方法1使用簡單,但由于利用了查詢控件,清空數(shù)據(jù)時需要查詢服務器后臺數(shù)據(jù)庫,所以速度稍慢,而且不適用于臨時表中各個字段由幾個數(shù)據(jù)表的字段拼湊而成的情況。方法2適用范圍廣、速度快,但需要編寫代碼。