剛寫完幾個多層的例子,本來准備再寫點其他稍微復雜的例子,很多同學就問數據庫訪問的方法,既然這樣,就先寫一下
數據庫訪問的過程與方法。kbmMW 支持很多數據庫訪問方式和控件,前面在安裝時已經說過了。由於delphi 已經在d7 以后
不再推薦使用其傳統的數據庫方式BDE了,尤其是在delphi XE2 由於支持win64, 已經不支持使用BDE 了,為了演示方便,本文
后台數據庫選擇使用完全免費的firebird。firebird 是一個非常短小精悍的關系數據庫,支持存儲過程、觸發器等常用功能。
有興趣的可以在http://www.firebirdsql.org/ 下載。訪問firebird 數據,本文使用devart 出品的IBDAC,如果沒有這個的話,可以
使用delphi 自帶的IBexpress 代替。
繼續打開我們以前的例子,再from 里添加以下幾個控件
IBCConnect 控件里面設置我們要訪問的數據庫配置。
kbmMWIBCConnectionPool 是數據庫訪問池,它的maxconnecions提供了數據庫池連接的最大值,這個值可以根據系統的資源和
訪問量來定,太大的話,對服務器資源要求太多,太小的話,會影響客戶端訪問的性能,同時cacheperformnce、MaxcacheAge、
maxCacheEntries、maxcacheRecordcount 用來控制數據庫的緩沖情況,例如,如果多個客戶端請求同一數據集的話,不用再到數據庫
里面讀取,在應用服務器里面直接返回到客戶端,減少數據庫的讀取,提高系統的訪問效率,這幾個參數也是要根據實際應用來選取,沒有
最好的,只有最合適的。我們今天的例子,暫時都使用默認值。
kbmMWInterbaseMetaData 主要是用來控制生成訪問數據庫SQL的具體語法的,例如不同的數據庫對字段、參數、表名的表達不完全一樣,
這個可以根據具體數據進行定制。
設置完上面的控件,我們進行下一步操作,點file->new->others... 出現kbmMW service wizard. 出現
這一次,我們選擇query service / kbmMW_1.0,然后點下一步,
選擇我們要使用的數據庫訪問方式devart ibdac,再選數據庫連接池的位置,點下一步,
然后一路點下去,直到最后生成代碼。最后就生成一個TkbmMWqueryservice,並出現下面的界面
可以看見上面幾個allowclient... 是用來控制客戶端訪問方式的,我們今天要寫一個
在客戶端使用sql 語句訪問服務器的例子,所以把Allowclinetstament 設為True,
同時為了客戶端能夠訪問服務器的query,設置query屬性為kbmMWIBDACQuery1,
設完后,在form1 里面注冊這個服務:
procedure TForm1.FormCreate(Sender: TObject);
var
sd:TkbmMWCustomServiceDefinition;
begin
sd:=kbmMWServer1.RegisterService(Txalionsrv,false);
sd:=kbmMWServer1.RegisterService(TkbmMWQueryService1,false);
end;
服務器端就設計好了,現在可以編譯程序並運行了。
現在打開客戶端程序,在from 上添加以下幾個控件,
kbmMWClientQuery1: TkbmMWClientQuery;
kbmMWBinaryStreamFormat1: TkbmMWBinaryStreamFormat;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
kbmMWClientConnectionPool1: TkbmMWClientConnectionPool;
如圖所示
並設置kbmMWClientQuery1的屬性如下圖
並按下圖設置 kbmMWClientConnectionPool1 的屬性
好了,更改button1 的點擊事件
procedure TForm2.Button1Click(Sender: TObject);
begin
kbmMWClientQuery1.query.clear;
kbmMWClientQuery1.query.add('select * from rssj');
kbmMWClientQuery1.Open;
end;
編譯運行,並點擊button1 ,我們就可以顯示數據庫了,如圖
好了,我們已經把服務器端的數據顯示到客戶端了,今天就先到這里,后面再寫數據庫的修改和更新到
服務器端。