三层代码讲解--第一课
主题:三层代码讲解--第一课
主持人:老吴
时间:2004-05-24
2004-05-24 10:47:00 天之痕_若虹(86278566)
請教大家一個問題好嗎
2004-05-24 10:47:27 煙灰缸(2282902)
請說,看看我能不能幫得上。
2004-05-24 10:48:15 天之痕_若虹(86278566)
ClientDataSet1 裡可以運行帶參數的SQL語句嗎
2004-05-24 10:48:27 dana(81828019)
當然可以
2004-05-24 10:48:28 天之痕_若虹(86278566)
ClientDataSet1.DataRequest('select * from CBQP where Room_Name=:pRN ');
ClientDataSet1.Params.ParamByName('pRN').value :='A22';
ClientDataSet1.Open;
2004-05-24 10:48:42 天之痕_若虹(86278566)
我這樣做報錯誤
2004-05-24 10:48:55 dana(81828019)
得先
ClientDataSet1.Params.add
2004-05-24 10:49:10 天之痕_若虹(86278566)
dana 我再試一下,謝謝
2004-05-24 14:20:58 煙灰缸(2282902)
今天提前來是有一個“好消息”宣布。
就是我寫的三層原代碼我已經放上去了,請大家先下載,3點左右開始開課討論。
2004-05-24 14:23:51 njf(317194138)
在那裡
2004-05-24 14:27:58 煙灰缸(2282902)
本來打算先傳給你,讓你幫忙轉一下簡體,你不在。
2004-05-24 14:29:28 煙灰缸(2282902)
講,但今天的內容可能要看著程序來講。
2004-05-24 14:35:47 煙灰缸(2282902)
密碼是:aleyn.wu
2004-05-24 14:40:46 楓長舞(273966879)
三層原代碼(規則層)
三層原代碼(事務層)
是一個東西嗎?
2004-05-24 14:41:02 煙灰缸(2282902)
是兩個不同的。
2004-05-24 14:41:30 煙灰缸(2282902)
其它控件不用管他,我們只關心程序的結構和思路。
2004-05-24 14:42:50 煙灰缸(2282902)
規則層是專門寫“規則”的,有好多個Module在裡面。
2004-05-24 14:43:17 煙灰缸(2282902)
事務層是專門“事務交換”的
2004-05-24 14:45:03 楓長舞(273966879)
今天講哪一層?
2004-05-24 14:45:41 煙灰缸(2282902)
事務層。但可能要幾個課時才講得完。
2004-05-24 14:53:57 天之痕_若虹(86278566)
三層原代碼(規則層) 3.0
三層原代碼(事務層) 3.0
dmBaseService[原 a] 3.0
dmBaseModule[原 a] 3.0
2004-05-24 14:54:03 天之痕_若虹(86278566)
上面的哪兩個呢
2004-05-24 14:54:06 煙灰缸(2282902)
前兩個。
2004-05-24 14:55:27 雨天(stuwe)(31926588)
要打開那一個工程
2004-05-24 14:55:29 煙灰缸(2282902)
那個時管理的RuleModule。
2004-05-24 14:55:39 煙灰缸(2282902)
先打開swServer2
2004-05-24 15:02:34 煙灰缸(2282902)
請大家打開第一個Project: swServer.prj
2004-05-24 15:16:01 Jackey(15677613)
swsever2?
2004-05-24 15:16:12 煙灰缸(2282902)
ye.
2004-05-24 15:18:02 煙灰缸(2282902)
整個swServer2就只是一個界面,就是Mainform
2004-05-24 15:18:17 煙灰缸(2282902)
其它的都是Module了。
2004-05-24 15:19:35 煙灰缸(2282902)
大家有沒有看到,主界面的功能就只有幾個功能,StartService 和StopService?
2004-05-24 15:20:39 煙灰缸(2282902)
為了節省內存,主界面必須越簡便越好。
2004-05-24 15:20:41 楓長舞(273966879)
能先簡單的介紹一下這個程序的功能嗎?我這不能運行。
2004-05-24 15:20:53 study delphi(393236549)
是的。
2004-05-24 15:21:29 煙灰缸(2282902)
先不要運行它,等到了一定時間再編譯好不?
2004-05-24 15:21:53 njf(317194138)
暫停怎麼沒有程序?
2004-05-24 15:22:13 煙灰缸(2282902)
慢慢來,先別急。。。。。。。。。。。。。。。。。。
2004-05-24 15:22:35 Jackey(15677613)
continue....
2004-05-24 15:25:21 煙灰缸(2282902)
楓長舞 我傳來INI給你,你幫我放上去,我的網站好像出了問題了。
2004-05-24 15:30:12 楓長舞(273966879)
http://www.x5f.com/xx.rar
http://www.x5f.com/vcl.rar
http://www.x5f.com/ServerINI.rar ;
2004-05-24 15:32:48 煙灰缸(2282902)
我們曾經討論過,規定更新的問題,不知大家記得否?
2004-05-24 15:33:36 llyygg(13029886)
-_-!不懂,提示一下?
2004-05-24 15:33:59 楓長舞(273966879)
可象是通過DLL實現的。那節課我沒聽完。
2004-05-24 15:34:02 煙灰缸(2282902)
StartService和StopService實際上就是開始和停止所有的Module
2004-05-24 15:34:36 Jackey(15677613)
要更新規則時,先stop這個規則.更新後再start.
2004-05-24 15:35:38 煙灰缸(2282902)
如果是只更新一部分的話,就無須在這裡STOP所以,有另一個管理程序來管理更新。
2004-05-24 15:36:02 煙灰缸(2282902)
就是swMMC.prj,我們下一課再講。
2004-05-24 15:36:24 煙灰缸(2282902)
主界面東西不多,就不多講了。
2004-05-24 15:37:59 煙灰缸(2282902)
今天先簡單介紹一下所有的東西的大概功能,下一課才發揮作用。
2004-05-24 15:38:30 煙灰缸(2282902)
請大家打開Type Library.
2004-05-24 15:39:07 煙灰缸(2282902)
都打開了嗎?
2004-05-24 15:39:19 llyygg(13029886)
打開了
2004-05-24 15:39:44 楓長舞(273966879)
view->type library
2004-05-24 15:40:13 煙灰缸(2282902)
IDataServer2的接口不多,只要4個,是不?
2004-05-24 15:41:01 煙灰缸(2282902)
實際上只有兩個function和一個Property
2004-05-24 15:41:30 煙灰缸(2282902)
起重要作用的function是DataModule
2004-05-24 15:43:35 煙灰缸(2282902)
所有的“規則”都是由它來裝載和返回數據。
2004-05-24 15:45:37 煙灰缸(2282902)
其它中DefaultModule是指缺省的“規則”,同樣也是調用DataModule
2004-05-24 15:45:56 煙灰缸(2282902)
請大家打開Unit: DataServer_form
2004-05-24 15:48:29 煙灰缸(2282902)
property Ole: THMOleVariant read FOle;
property OleParams: THMOleVariant read FParams;
2004-05-24 15:49:39 煙灰缸(2282902)
這兩個主要是存有Client傳來的Param 和要返回的DataParam
2004-05-24 15:50:59 煙灰缸(2282902)
我們寫三層的時候,有一點要和CLIENT統一的是。
2004-05-24 15:51:42 煙灰缸(2282902)
不管你的Param有多少,你只要把它打成一個包給我就可以了。
我也一樣,我把我要返回的,也打也一個包給你。
這就是OleVariant了。
2004-05-24 15:52:32 煙灰缸(2282902)
function DataModule(ModuleIndex: Integer; Param: OleVariant; var Data, Msg: OleVariant): WordBool; safecall;
2004-05-24 15:52:48 煙灰缸(2282902)
這就是這個原因。
2004-05-24 15:54:17 煙灰缸(2282902)
DataModule就列明了一切,param是Client的,Data是要返回的,Msg是返回信息。
2004-05-24 15:55:13 煙灰缸(2282902)
FBaseService.Reset;
FOle.Clear;
FParams.Clear;
if not VarIsNull(Param) then FParams.LoadFromOle(Param);
2004-05-24 15:56:13 楓長舞(273966879)
是不是用戶選擇調用功能,並將參數列表發送給服務器端,處理後的通過DATA返回給用戶。
2004-05-24 15:56:26 煙灰缸(2282902)
裝載“規則”的初始化比較簡單,就是復們
2004-05-24 15:56:29 煙灰缸(2282902)
是。
2004-05-24 15:59:38 煙灰缸(2282902)
請大家另開一個DELPHI,打開dmDefault.prj
2004-05-24 16:00:23 煙灰缸(2282902)
看來要結合來看才明了一些。
2004-05-24 16:01:57 煙灰缸(2282902)
在ServerPlug.rar裡。
2004-05-24 16:02:45 煙灰缸(2282902)
要打開兩個Delphi,不要關了swServer.prj
2004-05-24 16:04:52 煙灰缸(2282902)
請大家找開Unit:dmBaseModule
2004-05-24 16:05:29 煙灰缸(2282902)
Line:56-72
[code]
IBaseDataModule = interface
['{0CEF4911-3E0C-4AC9-AAD7-69CA907E3979}']
function GetModuleInfo: WideString; stdcall;
function GetBaseService: IBaseService; stdcall;
procedure SetBaseService(const Value: IBaseService); stdcall;
function GetModule(): integer; stdcall;
procedure SetModule(const value: integer); stdcall;
function Operation(var Data, Msg: OleVariant): WordBool; stdcall;
procedure LoadOleParam(const Param: OleVariant); stdcall;
property BaseService: IBaseService read GetBaseService write SetBaseService;
property Module: integer read GetModule write SetModule;
property ModuleInfo: WideString read GetModuleInfo;
end;
[/code]
2004-05-24 16:06:20 煙灰缸(2282902)
IBaseDataModule是“規則”的基本接口。
2004-05-24 16:08:53 煙灰缸(2282902)
function Operation(var Data, Msg: OleVariant): WordBool; stdcall;
這個function是“規則”與“事務”交易的。
其本流程是
2004-05-24 16:10:01 楓長舞(273966879)
從哪個向服務器傳遞參數呢?
2004-05-24 16:10:32 Jackey(15677613)
client -> save to ole param ->server
2004-05-24 16:10:40 煙灰缸(2282902)
ye
2004-05-24 16:11:53 煙灰缸(2282902)
我在TBaseService裡定義了許多“事務”
2004-05-24 16:12:15 煙灰缸(2282902)
它的接口是IBaseService
2004-05-24 16:12:27 煙灰缸(2282902)
Unit: dmBaseModule
2004-05-24 16:13:07 幽燕遊俠(1142610)
看書上說 OleVariant 型的參數佔用空間比較大
對網絡資源佔用比較高
對嗎?
2004-05-24 16:13:26 煙灰缸(2282902)
如果IBaseDataModule需要“數據事務”時,它就向IBaseService 申請。
2004-05-24 16:13:32 煙灰缸(2282902)
是。
2004-05-24 16:14:02 煙灰缸(2282902)
所以我下一個版本打算用網絡底層來做。
2004-05-24 16:15:52 楓長舞(273966879)
底層做是不是太復雜了,與編程效率比不合算吧
2004-05-24 16:16:42 幽燕遊俠(1142610)
就我而言
我很難網絡底層和數據庫的操作聯系起來
2004-05-24 16:16:57 楓長舞(273966879)
我在自己的程序中用的數據包壓縮技術就是看的李维的。
2004-05-24 16:17:27 幽燕遊俠(1142610)
不過OleVariant 型的參數的確是很好用的
我喜歡
2004-05-24 16:19:23 煙灰缸(2282902)
這樣好了,大家先大概劉覽一下整個Project:swServer2.prj和dmDefault.prj
2004-05-24 16:19:50 煙灰缸(2282902)
有些時候我講的時候就可能不指明Unit名了。
2004-05-24 16:20:22 煙灰缸(2282902)
大家花10分鐘來大概劉覽一下
2004-05-24 16:36:11 煙灰缸(2282902)
我自己也有一點疑問,不知我講的大家是否聽得明?
2004-05-24 16:37:22 煙灰缸(2282902)
也不知我這個“老師”是不是“合格”。。。。。。。。。。B
2004-05-24 16:37:25 楓長舞(273966879)
明白你的道理,因為沒有接觸過這種方式的程序設計,所以。。。
2004-05-24 16:38:15 煙灰缸(2282902)
之前我也用過李維的方式,但總覺得他的方式不夠靈活。。。。。。。。。。。。。。。
2004-05-24 16:39:01 無翅飛翔(149210786)
是啊是啊,我也有這樣的感覺啊
2004-05-24 16:41:03 楓長舞(273966879)
你主要講的是不是如下的設計方法:
在服務器端設計一個功能調用方法,該方法根據客戶端傳遞過來的要使用的功能的說明和參數列表裝入相應的規則功能並執行它,然後將結果返回給客戶端?
2004-05-24 16:41:19 煙灰缸(2282902)
不管了,有“不很懂”的“老師”,肯定也有“不能懂”的“學生”。。。。。。。。。。。。。大家請見將就一下了。
2004-05-24 16:41:22 煙灰缸(2282902)
是。
2004-05-24 16:41:40 楓長舞(273966879)
看來我是理解對了?
2004-05-24 16:41:48 鬆鼠(64652023)
李維的方式不好,有什麼好的書介紹一下啊
看幫助有的又寫得很簡單
2004-05-24 16:42:40 鬆鼠(64652023)
幫助寫得不夠詳細,有的根本看不出什麼出來
2004-05-24 16:43:43 幽燕遊俠(1142610)
李維的算是初級入門篇
告訴你Socket和DCOM怎麼用
2004-05-24 16:44:52 煙灰缸(2282902)
繼續看回IBaseService好不?
2004-05-24 16:45:31 楓長舞(273966879)
我自己編寫的一個應用服務器程序,只有兩個DataSetProvider1控件和4個方法就完成了所有數據庫的存取操作。應該與你的有相仿的地方。
2004-05-24 16:45:43 dana(81828019)
能不能把代碼簡單化,能看出基本原理就行,你的代碼工程也挺多的,不知從何看起,也不知工程之間的聯系在哪,最好能多加些注釋。
今天第一天來聽課,聽得暈暈的。
2004-05-24 16:46:07 煙灰缸(2282902)
呵呵,有時間傳來討論討論一下。
2004-05-24 16:46:17 dana(81828019)
To 273966879(楓長舞)
你寫的這個能否共享給大家看看。
2004-05-24 16:46:38 煙灰缸(2282902)
OK,我下一次弄個簡單的。
2004-05-24 16:46:44 楓長舞(273966879)
數據庫用SQL2000,有30來個表,50多個視圖。
2004-05-24 16:48:14 煙灰缸(2282902)
最基本的“規則”是dmDefault.prj
2004-05-24 16:48:23 Jackey(15677613)
to dana: 先找最開始的那個stru及後來的那個midas.pdf.看過去的記錄. 你才能聽下去。否則真的會暈.
2004-05-24 16:48:33 煙灰缸(2282902)
最基本的“事務”是swServer2.prj
2004-05-24 16:48:40 煙灰缸(2282902)
其它都可以不用。
2004-05-24 16:49:40 無翅飛翔(149210786)
能說一下什麼屬于規則,什麼屬于事務呢
2004-05-24 16:50:50 煙灰缸(2282902)
無翅飛翔朋友,你可能要先看一下之前的記錄,前幾天有講過一些基本的。
2004-05-24 16:51:15 煙灰缸(2282902)
繼續講回IBaseService。
2004-05-24 16:51:55 煙灰缸(2282902)
所有的“數據事務”都在這裡設計。
2004-05-24 16:53:14 煙灰缸(2282902)
如果QQ群組有“置頂”記錄的功能就好了,就不會有這麼多朋友找不到以前相關的資料。K
2004-05-24 16:54:22 煙灰缸(2282902)
procedure BeginTrans; stdcall;
procedure CommitTrans; stdcall;
procedure RollbackTrans; stdcall;
2004-05-24 16:54:51 鬆鼠(64652023)
呵,認真聽課
2004-05-24 16:55:11 煙灰缸(2282902)
這是因為,“規則”不再關心“事務”的東西。
2004-05-24 16:55:29 煙灰缸(2282902)
這對以後改成其它數據會更好修收。
2004-05-24 16:56:27 煙灰缸(2282902)
這三個function實際上是ADOConnecion的功能。
2004-05-24 16:56:42 煙灰缸(2282902)
大家一看也明白是不?
2004-05-24 16:57:44 煙灰缸(2282902)
只是讓“事務”去操心這些而已。
2004-05-24 16:57:50 煙灰缸(2282902)
procedure ApplyUpdates(const Delta: OleVariant; TableName, KeyField: WideString); stdcall;
procedure ApplyUpdatesWithOle(const DeltaName, TableName, KeyField: WideString); stdcall;
procedure ApplyUpdatesRecordInfo(const DeltaName, TableName, KeyField: WideString); stdcall;
procedure ApplyUpdatesWithDataSet(const DataSet: integer; TableName, KeyField: WideString); stdcall;
2004-05-24 16:58:50 煙灰缸(2282902)
這裡定義了4種不同的數據更新方式。
2004-05-24 16:59:55 煙灰缸(2282902)
實際上都是調用
procedure InnerApplyUpdates(TableName, KeyField: WideString); stdcall;
procedure InnerApplyUpdates2(TableName, KeyField: WideString); stdcall;
只是方法不好,所需內存不同。
2004-05-24 17:01:06 煙灰缸(2282902)
DSP的更新方式我也不太懂,所以我自己又做了一個更新的,理論上和DSP差不多。
2004-05-24 17:01:33 煙灰缸(2282902)
不知誰能清楚DSP的更新方式?
DataSerProvider
2004-05-24 17:04:01 dana(81828019)
DSP更新不是有這三種嗎?
upWhereAll
upWhereKeyOnly
upWhereChanged
2004-05-24 17:04:33 煙灰缸(2282902)
可是它的更新機制你知道嗎?
2004-05-24 17:05:15 楓長舞(273966879)
不是說自動生成更新SQL語句驪?
2004-05-24 17:05:38 煙灰缸(2282902)
是啊,但你知道它是怎麼生成的嗎?
2004-05-24 17:05:42 幽燕遊俠(1142610)
記得說有一個detal
2004-05-24 17:05:44 dana(81828019)
不是很清楚,upWhereKeyOnly這個好像是根據Key來更新的。
2004-05-24 17:06:36 煙灰缸(2282902)
它是根據Delta來更新的,但是它的更新底層就有點復雜了。
2004-05-24 17:06:59 煙灰缸(2282902)
我研究了好久,都沒弄懂全部。
2004-05-24 17:07:05 楓長舞(273966879)
不過有時我發現它會多更新一些字段。我就遇到過這種事。
我改了一個字段,它卻更新了三個字段的值,其它兩個字段的值更新前後都一樣。
不知是為什麼?
2004-05-24 17:07:55 煙灰缸(2282902)
這個原因就是我最討厭的一個原因。
2004-05-24 17:08:09 煙灰缸(2282902)
因為它的更新方式不太好。
2004-05-24 17:08:33 楓長舞(273966879)
你的更新過程能給我看看嗎?
2004-05-24 17:08:52 煙灰缸(2282902)
裡面有啊。
2004-05-24 17:09:18 煙灰缸(2282902)
就是 procedure InnerApplyUpdates(TableName, KeyField: WideString); stdcall;
procedure InnerApplyUpdates2(TableName, KeyField: WideString); stdcall;
2004-05-24 17:10:04 幽燕遊俠(1142610)
以前我寫的都調用中間層的SQL語句更新
根本沒有用到DSP
2004-05-24 17:10:07 煙灰缸(2282902)
大家想一想,DSP更新時,它須要做什麼?
2004-05-24 17:10:58 幽燕遊俠(1142610)
中間層的方法封裝了SQL 用Dataset更新的
2004-05-24 17:11:08 幽燕遊俠(1142610)
DSP的沒有研究
2004-05-24 17:11:15 幽燕遊俠(1142610)
繼續聽課ing.......
2004-05-24 17:12:01 煙灰缸(2282902)
不,大家寫三層肯定會用到DSP(DataSerProvider)
2004-05-24 17:13:17 煙灰缸(2282902)
如果用DSP本身的方式來更新,是不是要指定一個Query給它?
2004-05-24 17:13:57 無翅飛翔(149210786)
指定TAODDataSet
2004-05-24 17:14:45 煙灰缸(2282902)
是啊,還必須打開TAODDataSet 是不?
2004-05-24 17:15:14 煙灰缸(2282902)
也就是說TAODDataSet 必須是Active的是不?
2004-05-24 17:15:32 無翅飛翔(149210786)
用的時候才打開TADODataSet啊
2004-05-24 17:15:52 dana(81828019)
要更新肯定會自動打開的.
2004-05-24 17:16:34 煙灰缸(2282902)
是啊,也就是說,你返回數據給CLIENT後,它必須是打開的,數據才好更新,是不?
2004-05-24 17:17:00 鬆鼠(64652023)
是啊
2004-05-24 17:17:39 無翅飛翔(149210786)
好像不是吧,TClientDataSet是打開的
2004-05-24 17:18:06 楓長舞(273966879)
更新是兩邊各自完成的。
2004-05-24 17:18:33 楓長舞(273966879)
更新後聽數據並不回傳給客戶端啊
2004-05-24 17:19:01 煙灰缸(2282902)
你的ClientDataSer是Active時,DataSetProvider是不是也是Active的?
2004-05-24 17:19:37 llyygg(13029886)
狀態對象?
2004-05-24 17:20:23 煙灰缸(2282902)
如果更新的字段有其它自動計算的字段,DSP不返回數據就麻煩了。
2004-05-24 17:20:38 無翅飛翔(149210786)
DataSetProvider是不是也是Active的?不大清楚
至少我沒有人為的去打開它
2004-05-24 17:20:53 楓長舞(273966879)
我一般不直接將ClientDataSer的Active:=TRUE
而是ClientDataSer.data:=ClientDataSer.DataRequest(...)
2004-05-24 17:21:18 llyygg(13029886)
我是cds.data := AppServer.GetData;
2004-05-24 17:21:23 煙灰缸(2282902)
看來有很多“事件”大家都沒多少關心它。
2004-05-24 17:21:41 llyygg(13029886)
是的,不懂,快教我們.
2004-05-24 17:21:50 楓長舞(273966879)
這樣服務器端的應該不會打開。更新時只要ApplyUpdates就可以了。
2004-05-24 17:22:11 無翅飛翔(149210786)
是啊,還是聽課吧
2004-05-24 17:22:20 煙灰缸(2282902)
ApplyUpdates時,DSP在做什麼?
2004-05-24 17:22:20 楓長舞(273966879)
to llyygg:效果是一樣的
2004-05-24 17:22:45 楓長舞(273966879)
ApplyUpdates時,DSP在做什麼?
DSP一定會打開的。
2004-05-24 17:22:47 llyygg(13029886)
是的,只是把方法說出來交流而已.
2004-05-24 17:22:48 煙灰缸(2282902)
大家請討論一下。
2004-05-24 17:23:41 llyygg(13029886)
解析Delta,然後根據需要更新到數據庫...不懂...
2004-05-24 17:24:01 楓長舞(273966879)
可以用 煙灰缸 的 InnerApplyUpdates 方法,我看了一點,感覺挺好的。這樣就可以不打開DSP了
2004-05-24 17:24:04 煙灰缸(2282902)
請大家明天做一個程序,看看ApplyUpdates時,DSP到底做了些什麼。
2004-05-24 17:24:14 llyygg(13029886)
怎麼看?
2004-05-24 17:24:22 煙灰缸(2282902)
用事件。
2004-05-24 17:25:06 llyygg(13029886)
楓長舞:不打開dsp有什麼好處嗎?
2004-05-24 17:25:19 煙灰缸(2282902)
節省內存,更快。
2004-05-24 17:26:13 llyygg(13029886)
用事件怎麼看?我平時就用Before(after)Update,onError,OnGetTable...看觸發順序?...
2004-05-24 17:26:50 煙灰缸(2282902)
我的做法是,盡量少佔用內存,要不用戶一多服務器就慢了。
2004-05-24 17:27:18 楓長舞(273966879)
煙灰缸:你的方法比DSP的方法快是嗎?
2004-05-24 17:27:55 煙灰缸(2282902)
大家可以看一看,你的服務層佔用了多少內存,用戶佔用比例是多少。
2004-05-24 17:28:10 煙灰缸(2282902)
裡論上是。
2004-05-24 17:28:14 楓長舞(273966879)
那錯誤信息你是怎麼處理的?
2004-05-24 17:28:28 煙灰缸(2282902)
什麼錯誤信息?
2004-05-24 17:28:53 llyygg(13029886)
你的計算字段是如何返回的?
2004-05-24 17:29:05 楓長舞(273966879)
如果更新失敗,你怎麼將失敗的信息返回給用戶?
2004-05-24 17:29:20 楓長舞(273966879)
比如鍵值重復什麼的
2004-05-24 17:29:35 煙灰缸(2282902)
就在MSG裡。
2004-05-24 17:30:27 楓長舞(273966879)
不能激活客戶端的ClientDataSet1ReconcileError事件嗎?
2004-05-24 17:31:59 煙灰缸(2282902)
不明白你的意思。
2004-05-24 17:33:29 Jackey(15677613)
applyupdate成功後,clientdataset要mergechangelog? 也就是說delta的清除是誰來做,delphi定義的還是自定義?
2004-05-24 17:34:17 煙灰缸(2282902)
要自己mergechangelog
2004-05-24 17:35:09 楓長舞(273966879)
當更新出現錯誤的時候,會觸發客戶端的ClientDataSet1ReconcileError事件。
2004-05-24 17:35:13 煙灰缸(2282902)
Client的ClientDataset也有一些加快速度的技巧。
2004-05-24 17:35:39 煙灰缸(2282902)
不讓它在那裡出現錯誤。
2004-05-24 17:36:00 楓長舞(273966879)
我用的的李維書中的攔截者的技術
2004-05-24 17:36:09 楓長舞(273966879)
進行壓縮的。
2004-05-24 17:36:30 楓長舞(273966879)
我明白你的用法了。
2004-05-24 17:37:08 煙灰缸(2282902)
Client可以讓它只更新一條數據,而不是更新所有的數據。
2004-05-24 17:37:24 煙灰缸(2282902)
對於有計算字段的,會更快。
2004-05-24 17:37:56 llyygg(13029886)
為什麼
2004-05-24 17:38:41 煙灰缸(2282902)
如果服務層只返回一條記錄,Client只接收和更新一條數據,是不是比重新GetData
2004-05-24 17:38:45 煙灰缸(2282902)
更新
更快
2004-05-24 17:39:07 llyygg(13029886)
計算字段用DSP是不需要重新GetData的
2004-05-24 17:39:24 煙灰缸(2282902)
打個比喻。
如果
你的訂單號碼是存檔後才生成的
而且是存檔時才去找最大的可用的訂單號碼
你怎麼做?
2004-05-24 17:40:39 llyygg(13029886)
是的在服務器才生成的數據,一樣可以不用重新刷新數據,DSP來完成很方便.
2004-05-24 17:41:09 楓長舞(273966879)
在數據中調用一個存儲過程。讓它去更新。
2004-05-24 17:41:54 llyygg(13029886)
cds.Reconcile(Appserver.ApplyUpdate(cds.Delta))
2004-05-24 17:41:58 楓長舞(273966879)
並讓它返回這單號
2004-05-24 17:42:16 楓長舞(273966879)
重新向服務器取這個單子的信息。
2004-05-24 17:43:10 llyygg(13029886)
不需要重新向服務器取這個單子的信息,用Reconcile方法就可以獲得了.
2004-05-24 17:44:02 煙灰缸(2282902)
這個Reconcile做了什麼動作?
2004-05-24 17:45:58 llyygg(13029886)
具體不清楚K, 他會接收ApplyUpdates返回的Result,根據情況觸發OnReconcileError事件或返回服務器端生成的數據,如單號, 並且MergeChagnelog
2004-05-24 17:46:38 煙灰缸(2282902)
具體也是差不多啦。
2004-05-24 17:46:53 煙灰缸(2282902)
今天好象講不完了。。。
2004-05-24 17:47:19 llyygg(13029886)
太快了,時間, 下班了,大家再見..
2004-05-24 17:48:05 煙灰缸(2282902)
還沒下班,還有幾分鐘,大家聊點其它的吧。
2004-05-24 17:48:59 煙灰缸(2282902)
Jackey好象有點忙。今天好象斜陽也不在。。。。。。。
2004-05-24 17:50:51 煙灰缸(2282902)
TO鬆鼠,看別人的例子,再自己寫一個。
2004-05-24 17:51:29 無翅飛翔(149210786)
一定要用DataSetProvider嗎
2004-05-24 17:52:04 煙灰缸(2282902)
如果你有更好的方式,你可以不用DSP
2004-05-24 17:53:09 煙灰缸(2282902)
你指的遠程錄入實際上就是把數據傳送到遠程SERVER是不?
2004-05-24 17:53:55 無翅飛翔(149210786)
曾經看到一個人說他不用DSP
那你的框架裡有沒有用到DSP呢
2004-05-24 17:54:14 煙灰缸(2282902)
下次來個手把手教寫一個MIDAS如何?
2004-05-24 17:54:34 煙灰缸(2282902)
有用到,但它的作用不大。
2004-05-24 17:55:08 無翅飛翔(149210786)
好啊,是和李維講的一樣嗎
2004-05-24 17:55:49 煙灰缸(2282902)
TO無翅飛翔,差不多啦,只是可能我沒他那麼耐心.N
[完]