主题:三层代码讲解--第一课
主持人:老吴
时间: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)
也不知我這個“老師”是不是“合格”。。。。。。。。。。