熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

用Delphi開發數據庫程序經驗三則

2013-11-11 21:06:35  來源: Delphi編程 
建立臨時表

  數據輸入是開發數據庫程序的必然環節在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 ″biolifedb″ Biolife
  where BiolifeCategory=′A′ and BiolifeCategory=′B′
  這樣臨時表就建立完成了

  方法使用代碼創建臨時表

  代碼如下
  function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;
  var
TempTable:TClientDataSet;
  begin
   TempTable:=nil;
   Result:=nil;
   if AFieldDefs<>nil then
   begin
   try
   TempTable:=TClientDataSetCreate(Application);
   TempTableFieldDefsAssign(AFieldDefs);
   TempTableCreateDataSet;
   Result:=(TempTable as TDataSet);
   Except
   if TempTable<>nil then
TempTableFree;

  Result:=nil;
   raise;
    end;
end;
 end;

  在程序中按如下方法使用
  procedure TFormButtonClick(Sender: TObject);
  var
ADataSet:TDataSet;
  begin
   ADataSet:=TDataSetCreate(Self);
   with ADataSetFieldDefs do
   begin
   Add(′Name′ftStringFalse);
   Add(′Value′ftIntegerFalse);
   end;

   with DataSource do
   begin
   DataSet:=CreateTableInMemory(ADataSetFieldDefs);
   DataSetOpen;
   end;

   ADataSetFree;
  end;

  臨時表創建完成

  方法使用簡單但由於利用查詢控件清空數據時需要查詢服務器後台數據庫所以速度稍慢而且不適用於臨時表中各個字段由數個數據表的字段拼湊而成的情況方法適用范圍廣速度快但需要編寫代碼(代碼中TFieldDefs的使用方法十分簡單見Delphi的聯機幫助)

配置數據引擎(BDESQL Link)
 
  有關數據庫程序分發時需要攜帶數據引擎(BDESQL 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


From:http://tw.wingwit.com/Article/program/Delphi/201311/8520.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.