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

2021-04-17 06:51:36 字數 2699 閱讀 7435

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<>nil then

begin

trytemptable.fielddefs.assign(afielddefs);

temptable.createdataset;

result:=(temptable as tdataset);

except

if temptable<>nil then

temptable.free;

result:=nil;

raise;

endend

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(′value′,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), **allint, **allint

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 壓縮Access資料庫

uses dao97,dao2000 procedure pac bdatabase srcdbname,dstdbname,oldpwd,newpwd string baccess97 boolean true var idbengine dbengine begin if oldpwd then...

delphi資料庫開發之資料記錄修改

ado.close ado.sql.clear ado.sql.add update userinfo set 姓名 a,性別 b,年齡 c,學歷 d where id e ado.parameters.parambyname a value trim edit2.text ado.paramete...

用C 開發Pocket PC資料庫應用程式

摘要 本文講解怎樣使用pocket pc phone edition工具集迅速建立無線資料庫應用程式。本文介紹的是使用visual c 和sql server ce 2.0建立乙個pocket pc phone edition應用程式。新的移動計算時代開始了 移動解決方案系統體系結構的一部分正在迅速...