首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 資料庫開發三大實戰技巧:臨時表、BDE 部署、InterBase 外部函數

     編輯:Delphi

1. 建立記憶體臨時表,提升輸入效能

C/S 架構下,客戶端常需批次輸入後再提交至後台資料庫,本地建立臨時表可減少網路往返。因筆數通常不大(幾百筆),置於記憶體最快。

方法一:TQuery + CachedUpdates

  1. 放置 TQuery,設定連線屬性。
  2. CachedUpdates := True; RequestLive := True;
  3. SQL 加入永不成立的 WHERE 子句,使查詢結果為空,即得空白可編輯資料集。例:WHERE Category='A' AND Category='B'。

優點:零代碼、簡單;缺點:清空需查詢後台、不適用多表字段拼湊臨時表。

方法二:TClientDataSet 動態建立(推薦)

function CreateTableInMemory(const AFieldDefs: TFieldDefs): TDataSet;
var TempTable: TClientDataSet;
begin
  Result := nil;
  if AFieldDefs = nil then Exit;
  TempTable := TClientDataSet.Create(Application);
  try
    TempTable.FieldDefs.Assign(AFieldDefs);
    TempTable.CreateDataSet;
    Result := TempTable as TDataSet;
  except
    TempTable.Free;
    raise;
  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('Age', ftInteger, 0, False);
  end;
  DataSource1.DataSet := CreateTableInMemory(ADataSet.FieldDefs);
  DataSource1.DataSet.Open;
  ADataSet.Free;
end;

優點:適用範圍廣、速度快、支援任意字段組合;缺點:需撰寫代碼(TFieldDefs 用法見線上幫助)。

2. 安裝程式自動配置 BDE / SQL Link 別名

分發資料庫程式需攜帶 BDE/SQL Link 並配置使用者名、密碼等別名參數。InstallShield for Delphi 雖無顯性選項,但產生的 *.iwz 腳本中 [IDAPI Alias] 區段可手工加入:

[IDAPI Alias]
username=SYSDBA
password=masterkey

安裝時即自動完成別名配置,免去逐台手工設定。

3. 在 InterBase 中使用外部函數擴充 SQL 能力

InterBase 內建函數極少(僅四個),難寫複雜預存程序。雖無法直接寫 UDF,但可宣告外部函數(呼叫 DLL)。範例宣告 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 為函數名。宣告後即可在 SQL 中使用:SELECT SUBSTR(country) FROM country。範例用 Delphi 附帶 IBLocal 資料庫;開發者亦可自行撰寫 DLL 擴充函數庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved