Delphi 三层框架开发客户端开发

新建一个application

如图 添加以下控件


 先启动scktsrvr.exe   此 在dephi程序的bin目录下  ) 然后   启动服务端 


再进行属性设置


代码如下

[delphi]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <pre name="code" class="delphi">unit ufrmMain;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, StdCtrls, DB, DBClient, MConnect, SConnect, Grids, DBGrids,  
  8.   ExtCtrls, ActnList,ufrmCreate;  
  9.   
  10. type  
  11.   TfrmMain = class(TForm)  
  12.     sconn: TSocketConnection;  
  13.     btnInit: TButton;  
  14.     dbgrdDep: TDBGrid;  
  15.     ds3: TDataSource;  
  16.     dsTemp: TClientDataSet;  
  17.     pnl1: TPanel;  
  18.     btnNew: TButton;  
  19.     btnModify: TButton;  
  20.     btnSave: TButton;  
  21.     btnCancel: TButton;  
  22.     btn2: TButton;  
  23.     actlst1: TActionList;  
  24.     actCreate: TAction;  
  25.     actModify: TAction;  
  26.     actSave: TAction;  
  27.     actCancel: TAction;  
  28.     actDelete: TAction;  
  29.     btnPostData: TButton;  
  30.     procedure btnInitClick(Sender: TObject);  
  31.     procedure actSaveExecute(Sender: TObject);  
  32.     procedure btnSaveClick(Sender: TObject);  
  33.     procedure btnCancelClick(Sender: TObject);  
  34.     procedure actCancelExecute(Sender: TObject);  
  35.     procedure btn2Click(Sender: TObject);  
  36.     procedure actDeleteExecute(Sender: TObject);  
  37.     procedure btnModifyClick(Sender: TObject);  
  38.     procedure btnNewClick(Sender: TObject);  
  39.     procedure actCreateExecute(Sender: TObject);  
  40.     procedure actModifyExecute(Sender: TObject);  
  41.     procedure btnPostDataClick(Sender: TObject);  
  42.     procedure dsTempAfterInsert(DataSet: TDataSet);  
  43.   private  
  44.     procedure EnableControl(Flag:Boolean);  
  45.   public  
  46.     { Public declarations }  
  47.   end;  
  48.   
  49. var  
  50.   frmMain: TfrmMain;  
  51.   
  52. implementation  
  53.   
  54. {$R *.dfm}  
  55. //添加函数  
  56. function GetGUID: string;        //add lgm  
  57. var  
  58.   LTep: TGUID;  
  59. begin  
  60.   CreateGUID(LTep);  
  61.   Result := GUIDToString(LTep);  
  62. end;  
  63.   
  64.   
  65.   
  66. procedure TfrmMain.btnInitClick(Sender: TObject);  
  67. var  
  68.   a:OleVariant;  
  69. begin  
  70.   sconn.Open;  
  71.   sconn.AppServer.GetData('tb_Department','1=1',a);  
  72.   dsTemp.Data:=a;  
  73.   sconn.Close;  
  74. end;  
  75.   
  76. procedure TfrmMain.actSaveExecute(Sender: TObject);  
  77. begin  
  78.    if dsTemp.State in [dsEdit,dsInsert] then  
  79.    begin  
  80.      dsTemp.Post;  
  81.      EnableControl(False);  
  82.    end;  
  83. end;  
  84.   
  85. procedure TfrmMain.btnSaveClick(Sender: TObject);  
  86. begin  
  87.   actSave.Execute;  
  88. end;  
  89.   
  90. procedure TfrmMain.btnCancelClick(Sender: TObject);  
  91. begin  
  92.   actCancel.Execute;  
  93. end;  
  94.   
  95. procedure TfrmMain.actCancelExecute(Sender: TObject);  
  96. begin  
  97.   if dsTemp.State in [dsEdit,dsInsert] then  
  98.   begin  
  99.     dsTemp.Cancel;  
  100.     EnableControl(False);  
  101.   end;  
  102. end;  
  103.   
  104. procedure TfrmMain.btn2Click(Sender: TObject);  
  105. begin  
  106.   
  107.   actDelete.Execute;  
  108. end;  
  109.   
  110. procedure TfrmMain.actDeleteExecute(Sender: TObject);  
  111. begin  
  112.   if dsTemp.eof and dsTemp.bof then exit;  
  113.   if MessageDlg('是否删除?',mtWarning,[mbYes,mbNo],-1)=mrYes then  
  114.   begin  
  115.     dsTemp.Delete;  
  116.   end;  
  117. end;  
  118.   
  119. procedure TfrmMain.btnModifyClick(Sender: TObject);  
  120. begin  
  121.   if dsTemp.Active then  
  122.   if dsTemp.eof and dsTemp.bof then exit;  
  123.   actModify.Execute;  
  124. end;  
  125.   
  126. procedure TfrmMain.btnNewClick(Sender: TObject);  
  127. begin  
  128.   if dsTemp.Active then  
  129.   actCreate.Execute;  
  130. end;  
  131.   
  132. procedure TfrmMain.actCreateExecute(Sender: TObject);  
  133. begin  
  134.   frmCreate:=TfrmCreate.Create(self);  
  135.   try  
  136.     frmCreate.IsCreate:=True;  
  137.     if  frmCreate.ShowModal=mrOK then  
  138.     begin  
  139.       EnableControl(true);  
  140.     end;  
  141.   finally  
  142.     frmCreate.Free;  
  143.   end;  
  144. end;  
  145.   
  146. procedure TfrmMain.actModifyExecute(Sender: TObject);  
  147. begin  
  148.   frmCreate:=TfrmCreate.Create(self);  
  149.   try  
  150.     frmCreate.IsCreate:=False;  
  151.     if  frmCreate.ShowModal=mrOK then  
  152.     begin  
  153.       EnableControl(true);  
  154.     end;  
  155.   finally  
  156.     frmCreate.Free;  
  157.   end;  
  158. end;  
  159.   
  160. procedure TfrmMain.EnableControl(Flag: Boolean);  
  161. begin  
  162.   btnCancel.Enabled:=Flag;  
  163.   btnSave.Enabled:=Flag;  
  164.   btnNew.Enabled:=not Flag;  
  165.   btnModify.Enabled:=not Flag;  
  166. end;  
  167.   
  168. procedure TfrmMain.btnPostDataClick(Sender: TObject);  
  169. var  
  170.   b:OleVariant;  
  171. begin  
  172.   //先进行保存  
  173.   actSave.Execute;  
  174.   sconn.Open;  
  175.   sconn.AppServer.PostData('tb_Department',dstemp.Data,b);  
  176.   sconn.AppServer.GetData('tb_Department','1=1',b);  
  177.   dsTemp.Data:=b;  
  178.   sconn.Close;      
  179. end;  
  180.   
  181. procedure TfrmMain.dsTempAfterInsert(DataSet: TDataSet);  
  182. begin  
  183.   dsTemp.FieldByName('FKey').AsString:=GetGUID;  
  184. end;  
  185.   
  186. end.C  


dfm代码
[delphi]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. object frmMain: TfrmMain  
  2.   Left = 724  
  3.   Top = 400  
  4.   Width = 588  
  5.   Height = 369  
  6.   Caption = 'frmMain'  
  7.   Color = clBtnFace  
  8.   Font.Charset = DEFAULT_CHARSET  
  9.   Font.Color = clWindowText  
  10.   Font.Height = -11  
  11.   Font.Name = 'MS Sans Serif'  
  12.   Font.Style = []  
  13.   OldCreateOrder = False  
  14.   PixelsPerInch = 96  
  15.   TextHeight = 13  
  16.   object btnInit: TButton  
  17.     Left = 88  
  18.     Top = 285  
  19.     Width = 75  
  20.     Height = 25  
  21.     Caption = #21152#36733#25968#25454  
  22.     TabOrder = 0  
  23.     OnClick = btnInitClick  
  24.   end  
  25.   object dbgrdDep: TDBGrid  
  26.     Left = 0  
  27.     Top = 41  
  28.     Width = 572  
  29.     Height = 204  
  30.     Align = alTop  
  31.     DataSource = ds3  
  32.     Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]  
  33.     TabOrder = 1  
  34.     TitleFont.Charset = DEFAULT_CHARSET  
  35.     TitleFont.Color = clWindowText  
  36.     TitleFont.Height = -11  
  37.     TitleFont.Name = 'MS Sans Serif'  
  38.     TitleFont.Style = []  
  39.   end  
  40.   object pnl1: TPanel  
  41.     Left = 0  
  42.     Top = 0  
  43.     Width = 572  
  44.     Height = 41  
  45.     Align = alTop  
  46.     TabOrder = 2  
  47.     object btnNew: TButton  
  48.       Left = 15  
  49.       Top = 7  
  50.       Width = 75  
  51.       Height = 25  
  52.       Caption = #26032#24314  
  53.       TabOrder = 0  
  54.       OnClick = btnNewClick  
  55.     end  
  56.     object btnModify: TButton  
  57.       Left = 107  
  58.       Top = 7  
  59.       Width = 75  
  60.       Height = 25  
  61.       Caption = #20462#25913  
  62.       TabOrder = 1  
  63.       OnClick = btnModifyClick  
  64.     end  
  65.     object btnSave: TButton  
  66.       Left = 198  
  67.       Top = 7  
  68.       Width = 75  
  69.       Height = 25  
  70.       Caption = #20445#23384  
  71.       Enabled = False  
  72.       TabOrder = 2  
  73.       OnClick = btnSaveClick  
  74.     end  
  75.     object btnCancel: TButton  
  76.       Left = 290  
  77.       Top = 7  
  78.       Width = 75  
  79.       Height = 25  
  80.       Caption = #21462#28040  
  81.       Enabled = False  
  82.       TabOrder = 3  
  83.       OnClick = btnCancelClick  
  84.     end  
  85.     object btn2: TButton  
  86.       Left = 411  
  87.       Top = 7  
  88.       Width = 75  
  89.       Height = 25  
  90.       Caption = #21024#38500  
  91.       TabOrder = 4  
  92.       OnClick = btn2Click  
  93.     end  
  94.   end  
  95.   object btnPostData: TButton  
  96.     Left = 225  
  97.     Top = 284  
  98.     Width = 144  
  99.     Height = 25  
  100.     Caption = #25552#20132#25968#25454#21040#26381#21153#22120  
  101.     TabOrder = 3  
  102.     OnClick = btnPostDataClick  
  103.   end  
  104.   object sconn: TSocketConnection  
  105.     ServerGUID = '{82AEC5B8-E53F-4725-A24D-456FD570E355}'  
  106.     ServerName = 'Project1.TestService'  
  107.     Host = '10.10.60.3'  
  108.     Left = 107  
  109.     Top = 143  
  110.   end  
  111.   object ds3: TDataSource  
  112.     DataSet = dsTemp  
  113.     Left = 255  
  114.     Top = 151  
  115.   end  
  116.   object dsTemp: TClientDataSet  
  117.     Aggregates = <>  
  118.     Params = <>  
  119.     RemoteServer = sconn  
  120.     AfterInsert = dsTempAfterInsert  
  121.     Left = 191  
  122.     Top = 147  
  123.   end  
  124.   object actlst1: TActionList  
  125.     Left = 289  
  126.     Top = 264  
  127.     object actCreate: TAction  
  128.       Caption = 'actCreate'  
  129.       OnExecute = actCreateExecute  
  130.     end  
  131.     object actModify: TAction  
  132.       Caption = 'actModify'  
  133.       OnExecute = actModifyExecute  
  134.     end  
  135.     object actSave: TAction  
  136.       Caption = 'actSave'  
  137.       OnExecute = actSaveExecute  
  138.     end  
  139.     object actCancel: TAction  
  140.       Caption = 'actCancel'  
  141.       OnExecute = actCancelExecute  
  142.     end  
  143.     object actDelete: TAction  
  144.       Caption = 'actDelete'  
  145.       OnExecute = actDeleteExecute  
  146.     end  
  147.   end  
  148. end  

新建记录修改和新增窗体 如下图

代码如下

[delphi]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. unit ufrmCreate;  
  2.   
  3. interface  
  4.   
  5.   
  6. uses  
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  8.   Dialogs, StdCtrls,DBClient,DB;  
  9.   
  10.   
  11. type  
  12.   TfrmCreate = class(TForm)  
  13.     edtName: TEdit;  
  14.     edtSex: TEdit;  
  15.     edtAge: TEdit;  
  16.     edtMobile: TEdit;  
  17.     mmoRemark: TMemo;  
  18.     lbl1: TLabel;  
  19.     lbl2: TLabel;  
  20.     lbl3: TLabel;  
  21.     lbl4: TLabel;  
  22.     lbl5: TLabel;  
  23.     btnSave: TButton;  
  24.     btnCancel: TButton;  
  25.     procedure FormCreate(Sender: TObject);  
  26.     procedure FormDestroy(Sender: TObject);  
  27.     procedure FormShow(Sender: TObject);  
  28.     procedure btnSaveClick(Sender: TObject);  
  29.   private  
  30.     FIsCreate: Boolean;  
  31.     FcdsDep: TClientDataSet;  
  32.     procedure SetIsCreate(const Value: Boolean);  
  33.     procedure init;  
  34.     { Private declarations }  
  35.   public  
  36.     property IsCreate:Boolean  read FIsCreate write SetIsCreate;  
  37.     property cdsDep:TClientDataSet  read FcdsDep write  FcdsDep;  
  38.   end;  
  39.   
  40.   
  41. var  
  42.   frmCreate: TfrmCreate;  
  43.   
  44.   
  45. implementation  
  46.     uses ufrmMain;  
  47. {$R *.dfm}  
  48.   
  49.   
  50. { TfrmCreate }  
  51.   
  52.   
  53. procedure TfrmCreate.SetIsCreate(const Value: Boolean);  
  54. begin  
  55.   FIsCreate := Value;  
  56.   if IsCreate then  
  57.     Caption:='Create'  
  58.   else  
  59.     Caption:='Modify';  
  60. end;  
  61.   
  62.   
  63. procedure TfrmCreate.FormCreate(Sender: TObject);  
  64. begin  
  65.   cdsDep:=TClientDataSet.Create(Self);  
  66. end;  
  67.   
  68.   
  69. procedure TfrmCreate.FormDestroy(Sender: TObject);  
  70. begin  
  71.   cdsDep.Free;  
  72. end;  
  73.   
  74.   
  75. procedure TfrmCreate.FormShow(Sender: TObject);  
  76. begin     
  77.   if IsCreate then  
  78.   begin  
  79.     frmMain.dsTemp.Insert;  
  80.   end else  
  81.   begin  
  82.     init;  
  83.     frmMain.dsTemp.Edit;  
  84.   end;  
  85. end;  
  86.   
  87.   
  88. procedure TfrmCreate.btnSaveClick(Sender: TObject);  
  89. begin  
  90.   if edtName.Text=''  then  
  91.   begin  
  92.     ShowMessage('姓名不能为空');  
  93.     Exit;  
  94.   end;  
  95.   if edtMobile.Text='' then  
  96.   begin  
  97.      ShowMessage('电话号码不能为空');  
  98.      exit;  
  99.   end;  
  100.   if frmMain.dsTemp.State in [dsEdit,dsInsert] then  
  101.   begin  
  102.     frmMain.dsTemp.fieldbyName('FName').AsString:=edtName.Text;  
  103.     frmMain.dsTemp.fieldbyName('FSex').AsString:=edtSex.Text;  
  104.     frmMain.dsTemp.fieldbyName('FAge').AsString:=edtAge.Text;  
  105.     frmMain.dsTemp.fieldbyName('FMobile').AsString:=edtMobile.Text;  
  106.     frmMain.dsTemp.fieldbyName('FRemark').AsString:=mmoRemark.Text;  
  107.     ModalResult:=mrOk;  
  108.   end else  
  109.     ModalResult:=mrCancel;  
  110. end;  
  111.   
  112.   
  113. procedure TfrmCreate.init;  
  114. begin  
  115.   edtName.Text:=frmMain.dsTemp.fieldbyName('FName').AsString;  
  116.   edtSex.Text:=frmMain.dsTemp.fieldbyName('FSex').AsString;  
  117.   edtAge.Text:=frmMain.dsTemp.fieldbyName('FAge').AsString;  
  118.   edtMobile.Text:=frmMain.dsTemp.fieldbyName('FMobile').AsString;  
  119.   mmoRemark.Text:=frmMain.dsTemp.fieldbyName('FRemark').AsString;  
  120. end;  
  121.   
  122.   
  123. end.  

运行客户端程序 进行测试如下


点击加载数据 显示数据

最后只有提交到服务器 才能真正的保存数据到数据库
此 基本结束 如有问题 请留言

项目源码下载 —— http://download.csdn.net/detail/gykthh/8077801

MateyFrame是一款由Delphi开发三层架构框架,经过多年的升级改进,版本由MateyFrame V1.0升级到了当前的MateyFrame V5.0版本。MateyFrame V5.0具有功能强大、负载量大、安全性高、可扩展性强、同时支持B/S与C/S运行模式、开发简单等特性。MateyFrame V5.0由中间层服务端、客户端框架、MateyWeb组件三部分组成,同时支持 Oracle、MSSQL、MySQL数据库。 中间层服务端 采用面向对象方法设计而成,具有稳定性强、安全性高、负载量大、可扩展性强等特性。 采用数据库连接池技术,支持多数据库应用及多种数据库的应用,可以很好的处理断网、数据库重新启动等异常情况,一旦外界环境恢复后,连接池将重新连接数据库,不需要重启服务程序。 使用HTTP协议与客户端进行通信,可以适合企业内网及企业外网等任何网络环境,更适合在Internet网络上运行程序。 服务端支持多种类型的大型数据库一起使用,支持的数据库有:Oracle、MSSQL、MySQL。 服务端采用插件技术开发,系统核心插件可以直接使用,另外用户可轻松地扩展自己需要的服务插件。 服务端采用会话管理技术,为每个客户端会话分配唯一的加密密钥,交互数据在底层进行加密传输,保证了数据在传输过程中的高安全性。 服务端支持多实例运行模式,当客户端用户量大增时,可以适当增加中间层实例,解决大并发量的问题。 服务端插件实现了真三层、伪三层的核心插件,用户可以根据安全级别选用任何一种模式进行应用。 服务端使用Win服务运行模式,重启服务器不需登录系统开启服务程序,服务端即可自动运行。 具有客户端程序发布功能,可以为客户端软件的自动更新服务。 客户端框架客户端设计成 EXE+BPL+DLL 的文件结构模式,具有扩展性强、易于开发、易于维护、使用简单等特点; 程序框架同时支持B/S、C/S模式,即可以通过客户端运行程序,也可以通过浏览器运行程序,并且支持两种模式同时存在。 使用插件开发模式,业务功能根据实际需要封装在不同的模块 DLL 中,即插即用; 封装了强大的基类,底层数据访问、出错处理、权限控制等; 系统功能根据业务模块信息自动生成,可以手动配置功能菜单列表; 框架中包含用户及权限管理插件,拿来即用,此模块可严格控制各功能Form 的详细权限(添加、修改、删除)、特殊数据的读取权限; 框架中包含了数据字典、系统参数的设置功能,拿来即可用。 框架采用调用时下载相关依赖文件的模式进行程序更新,具有更新文件少、更新速度快等特点; 框架支持程序文件流加载模式,更新的程序文件不需要保存在客户端的机器上,可大大增强程序的安全性。 框架有设计模式与运行模式之分,在设计模式下客户端通过框架功能用SQL可以直接读取到数据库的数据,方便程序开发;但在运行模式中,此功能不可用,这样可以保证数据的安全性。 框架设计了通用的报表设计模块,用户只需简单调,就可以得到自己所需要的报表模板设计,得到功能所需要的报表。 可选用分页数据处理技术,使大批量数据分页返回,分解服务器的压力; 具有负载平衡的功能,当连接的中间层服务器端负载过大或者崩溃时,会自动转向其它可用中间层服务器。 具有断线重连功能,当网络的异常恢复时,系统底层连接会重新连接,不用重启程序就可使用。 框架提供超级查询组件,组件可以根据编号、名称、五笔码、拼音码对需要查询的数据进行快速过滤。 MateyWeb组件 MateyWeb组件是一款能被IE加载运行的ActiveX控件,它是客户端程序在B/S模式下运行的载体。 MateyWeb组件支持WinXP、Win2000、Win2003、Win7、Vista等操作系统。 MateyWeb组件支持IE及以IE为内核的所有浏览器。 应用场合 非常适合开发各种应用于Internet之上的大中型的MIS管理软件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值