主题:三层代码讲解--第一课
主持人:老吴
时间: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

[完]

三层代码讲解--第一课相关推荐

  1. 三层代码讲解--第二课 DATE :2004-05-25

    主题:三层代码讲解--第二课 主持人:老吴 时间:2004-05-25 2004-05-25 15:07:16 煙灰缸(2282902) 繼續昨天的東西 2004-05-25 15:08:58 煙灰缸 ...

  2. FANUC 宏程序 讲解 第一课

    FANUC 宏程序 讲解 第一课 首先,先讲下自己的一些想法和看法,公众号搞了已经好多年了,一直没能用到正路,每天一直都是追剧打游戏,<自杀式>浪费仅有的几十年光阴,一直没有所醒悟,只到无 ...

  3. python要在哪里写代码-初识python【今天开始写代码】第一课

    这门课程包含的内容适用于初级的数据科学家们来提升自己的python技能.其中,第一节课我们会简单得介绍一下python的语法,变量赋值和几何运算. 你好,Python! Python是以英国喜剧团体巨 ...

  4. WPF第一章(XAML前台标记语言(Chapter02代码讲解))

    XAML前台标记语言(Chapter2代码讲解)     很不好意思,工作有点忙,博客停了两天.相对于一门语言的学习,理论知识和实践必不可少,大多数时间我们要用,对于代码也是,一边不行可以看两遍,实在 ...

  5. c语言第一课程序代码怎么打,【北北的小程序】北のC语言第一课:helloworld

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 诶多!helloworld神马的,是我们要编写的第一个程序哟! 话说第一课为什么不讲一些C语言的发展,优势什么的呢?因为LZ是java党!对C语言本身不是 ...

  6. php什么设置前端代码,代码编辑器与PHPSTUDY的安装与配置过程(前端第一课)

    前端第一课:编辑器与PHPSTUDY的安装与配置过程 编辑器安装过程 1.Visual Studio Code 官网下载软件,解压下载文件,打开安装程序安装至你的计算机. 2.安装"Chin ...

  7. 吴恩达 神经网络和深度学习 第一课 第四周(代码和库)

    参考博客(主代码):https://blog.csdn.net/u013733326/article/details/79767169 下面是需要的库文件代码:testCases,dnn_utils_ ...

  8. java代码去连接flash media server服务器_flash media server 第一课:Hello world!

    client-server架构 FMS是基于RTMP协议的client-server架构. 客户端的应用由flash或是flex搭建,运行在flash player或是AIR上,服务器端运行在服务器上 ...

  9. 妙味课堂——HTML+CSS(第一课)

    一句话,还记忆不如烂笔头,何况还这么笨,记下笔记,也是记录这一路学习的过程. 妙味课堂第一课并未一味地先讲HTML,而是穿插着CSS讲解,这一点不同于一些其他视频,这一点挺特别的!所以这一课涉及到HT ...

最新文章

  1. 计算机 网络访问保护,开启win2008网络访问保护的具体步骤
  2. 本科、硕士、博士的区别(终极版,太形象了!)
  3. grads 相关系数_教程合集 | Grads数据处理基础
  4. web前端学习之ruby标记和rt/rp标记
  5. 关于对象的引用作为参数,可以直接访问私有成员的问题
  6. Java常见排序算法之堆排序
  7. python pil_python PIL 图像处理
  8. 为什么每次进入命令都要重新source /etc/profile 才能生效?
  9. window和document对象
  10. 免费从5sing上下载歌曲
  11. python写出雷霆战机_利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!
  12. 初识DE2-115(包含光盘demo)
  13. Mean-shift算法的直观理解
  14. neo4j中心度算法(Centrality algorithm)-2.Betweenness Centrality algorithm
  15. oracle中的remark,Oracle cookie remark
  16. 多渔:赚钱,还是要脚踏实地!
  17. 数据库应用——Redis详解
  18. gap year_为什么中国大学生很少选择间隔年(gap year)?
  19. MySQL的date_format()和str_to_date()
  20. wireshark过滤规则及过滤数据内容是否包含

热门文章

  1. 文件系统的两种文件索引模式extent和blockmap
  2. 报表工具JasperReports视频教程
  3. MBG 相关资源链接
  4. Objective-C中new与alloc/init的区别
  5. c# for 应输入;
  6. ubuntu下Tomcat7的安装和配置
  7. ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
  8. CPU占用率高的九种可能~
  9. LVS TUN模式搭建
  10. 中小企业市场 一些超级IT企业的动向