用Delphi 開發資料庫程式經驗三則 (轉)

worldblog發表於2007-12-06
用Delphi 開發資料庫程式經驗三則 (轉)[@more@]1.建立臨時表
  資料輸入是開發的必然環節。在Client/Server結構中,客戶端可能要輸入一批資料後,再向的後臺資料庫提交,這就需要在本地(客戶端)建立臨時資料表來輸入的資料,待提交後,清除本地表資料。這種方法的好處是:提高輸入,減小負擔。

  由於使用者一次輸入的資料量一般情況下較小(不會超過幾百條記錄),所以臨時表可以建立在中,這樣處理速度較快。
  方法1:使用查詢(TQuery)
  第1步:在窗體上放上查詢控制元件(TQuery),設定好所連線的資料表。
  第2步:使TQuery. CachedUpdates=True;
   TQuery. RequestLive=True
  第3步:在原有的語句後加入一條Where子語句,要求加入這條Where子語句後SQL查詢結果為空。
  例如:
   Biolife.″Species No″, Category, Common_Name, Biolife.″Species Name″, Biolife.″Length (cm)″, Length_In, Notes, Graphic
   FROM ″biolife.″ 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: T);
  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 Data1 do
   begin
   DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
   DataSet.Open;
   end;

   ADataSet.Free;
  end;

  臨時表建立完成。

  方法1使用簡單,但由於利用查詢控制元件,清空資料時需要查詢伺服器後臺資料庫,所以速度稍慢,而且不適用於臨時表中各個欄位由數個資料表的欄位拼湊而成的情況。方法2適用範圍廣、速度快,但需要編寫程式碼。(程式碼中TFieldDefs的使用方法十分簡單,見的聯機幫助)。

2.資料引擎(BDE、SQL Link)
  有關資料庫程式分發時,需要攜帶資料引擎(BDE、SQL Link),並且在客戶端完程式後還需要配置資料引擎,如使用者名稱(username)、密碼(Pass)等等。如果手工配置的話,工作量比較大(根據客戶機數量而定)。而InstallShield For Delphi又好像沒有這方面的選項,其實InstallShield For Delphi可以做到,在生成安裝程式的目錄裡有一個*.iwz的文字,只要在[ID Alias]片段中手工加入即可。 例如:
   [IDAPI Alias]
   usesname=SYS
   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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988876/,如需轉載,請註明出處,否則將追究法律責任。

相關文章