上次寫了從kbmMW服務器給客戶端返回數據,我們實現了數據的查詢功能,但是當客戶端對數據進行了增加、更新、刪除的操作,
我們必須把這些操作返回到服務器端,並對后台數據庫進行更新。kbmMW 可以很方便的實現這一功能,今天就做一個更新數據到
服務器的例子。
還是在昨天的基礎上,我們要把客戶端的信息更新到服務器上,首先需要在服務器端的Tkbmqueryservice 設置允許客戶端更新
的權限,如圖
即把allowclient 開頭的幾個屬性都設為True;
同時為了保證客戶端可以插入數據,要設一下TkbmMWIBDACResolver的insertkeyfields 為 True.
這樣服務器端就可以了,現在編譯並運行。
在客戶端,我們放置一個TDBNavigator 和一個按鈕。如圖
通過TDBNavigator 可以把對數據更改保存的客戶端,再通過"更新到后台" 按鈕把數據寫到服務端。
同時,由於我們使用的是直接sql 語句讀取數據的,因此,為了能夠在服務器端更新數據,必須提供兩個
參數,一個是tablename, 一個是keyfeilds. 所以我們更改一下讀取數據的過程:
procedure TForm2.Button1Click(Sender: TObject);
begin
kbmMWClientQuery1.close;
kbmMWClientQuery1.Query.Clear;
kbmMWClientQuery1.Query.Add('select * from RSSJ');
kbmMWClientQuery1.KeyFields:='XH'; // 設置主鍵
kbmMWClientQuery1.TableName:='RSSJ'; // 設置表名
kbmMWClientQuery1.Open;
end;
這樣,我們就可以先讀取數據,然后編輯數據,使用TDBNavigator 確認更改,最后再更新到后台服務器及數據庫服務器,
kbmMW 會根據更改的delta 自動生成更新的sql 語句,然后寫入數據庫。把客戶端的數據變化更新到后台非常簡單,代碼
如下:
procedure TForm2.Button3Click(Sender: TObject);
begin
kbmMWClientQuery1.Resolve();
end;
下圖為運行結果
為了更好的說明這個問題,我們再客戶端分別作增加,更新,刪除三個操作,然后更新到后台,
同時在服務器端使用devart 的dbmonitor 來檢測一下,看看服務器是怎么生成sql 語句的。
通過這個檢測,我們很清楚的可以看到各個操作的sql 都成功生成,並且順利執行了。
今天我們完成了單表的更新操作,但是在實際開發中,經常遇見的是多表同時更新的事務操作,多個表要要么同時更新成功,要么全部滾回。
今天太晚了,我們下次再講事務操作吧。
