三层代码讲解--第一课

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

上一篇:ASP.NET MVC5+EF6+EasyUI 后台管理系统(84)-Quartz 作业调度用法详解一


下一篇:Linux服务器通过LVM扩展其磁盘空间