| 導購 | 订阅 | 在线投稿
分享
 
 
 

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

2008-06-01 01:59:02  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
  1.建立臨時表

  數據輸入是開發數據庫程序的必然環節。在Client/Server結構中,客戶端可能要輸入一批數據後,再向服務器的後台數據庫提交,這就需要在本地(客戶端)建立臨時數據表來存儲用戶輸入的數據,待提交後,清除本地表數據。

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  這種方法的好處是:提高輸入效率,減小網絡負擔。

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

  方法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;

  ADataSet.Free;

  end;

  臨時表創建完成。

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

  2.配置數據引擎(BDE、SQL Link)

  有關數據庫程序分發時,需要攜帶數據引擎(BDE、SQL Link),並且在客戶端安裝完程序後還需要配置數據引擎,如用戶名(username)、密碼(PassWord)等等。假如手工配置的話,工作量比較大(根據客戶機數量而定)。

  

   而InstallShield For Delphi又似乎沒有這方面的選項,其實InstallShield For Delphi可以做到,在生成安裝程序的目錄裏有一個*.iwz的文本文件,只要在[IDAPI Alias]片段中手工加入即可。 例如:

  [IDAPI Alias]

  usesname=SYSDBA

  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。
用Delphi 開發數據庫程序經驗三則
更多內容請看數據庫相關文章專題,或
 
  1.建立臨時表   數據輸入是開發數據庫程序的必然環節。在Client/Server結構中,客戶端可能要輸入一批數據後,再向服務器的後台數據庫提交,這就需要在本地(客戶端)建立臨時數據表來存儲用戶輸入的數據,待提交後,清除本地表數據。 這種方法的好處是:提高輸入效率,減小網絡負擔。   由于用戶一次輸入的數據量一般情況下較小(不會超過幾百條記錄),所以臨時表可以建立在內存中,這樣處理速度較快。   方法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;    ADataSet.Free;   end;   臨時表創建完成。   方法1使用簡單,但由于利用查詢控件,清空數據時需要查詢服務器後台數據庫,所以速度稍慢,而且不適用于臨時表中各個字段由數個數據表的字段拼湊而成的情況。方法2適用範圍廣、速度快,但需要編寫代碼。(代碼中TFieldDefs的使用方法十分簡單,見Delphi的聯機幫助)。 2.配置數據引擎(BDE、SQL Link)   有關數據庫程序分發時,需要攜帶數據引擎(BDE、SQL Link),並且在客戶端安裝完程序後還需要配置數據引擎,如用戶名(username)、密碼(PassWord)等等。假如手工配置的話,工作量比較大(根據客戶機數量而定)。 而InstallShield For Delphi又似乎沒有這方面的選項,其實InstallShield For Delphi可以做到,在生成安裝程序的目錄裏有一個*.iwz的文本文件,只要在[IDAPI Alias]片段中手工加入即可。 例如:    [IDAPI Alias]    usesname=SYSDBA    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。 [url=/bbs/detail_1785128.html][img]http://image.wangchao.net.cn/it/1323424631136.gif[/img][/url] 更多內容請看數據庫相關文章專題,或
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
  免責聲明:本文僅代表作者個人觀點,與王朝網絡無關。王朝網絡登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
© 2005- 王朝網路 版權所有