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

2 篇文章 0 订阅
2 篇文章 0 订阅

新建一个application

如图 添加以下控件


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


再进行属性设置


代码如下

<pre name="code" class="delphi">unit ufrmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBClient, MConnect, SConnect, Grids, DBGrids,
  ExtCtrls, ActnList,ufrmCreate;

type
  TfrmMain = class(TForm)
    sconn: TSocketConnection;
    btnInit: TButton;
    dbgrdDep: TDBGrid;
    ds3: TDataSource;
    dsTemp: TClientDataSet;
    pnl1: TPanel;
    btnNew: TButton;
    btnModify: TButton;
    btnSave: TButton;
    btnCancel: TButton;
    btn2: TButton;
    actlst1: TActionList;
    actCreate: TAction;
    actModify: TAction;
    actSave: TAction;
    actCancel: TAction;
    actDelete: TAction;
    btnPostData: TButton;
    procedure btnInitClick(Sender: TObject);
    procedure actSaveExecute(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure actCancelExecute(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure actDeleteExecute(Sender: TObject);
    procedure btnModifyClick(Sender: TObject);
    procedure btnNewClick(Sender: TObject);
    procedure actCreateExecute(Sender: TObject);
    procedure actModifyExecute(Sender: TObject);
    procedure btnPostDataClick(Sender: TObject);
    procedure dsTempAfterInsert(DataSet: TDataSet);
  private
    procedure EnableControl(Flag:Boolean);
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}
//添加函数
function GetGUID: string;        //add lgm
var
  LTep: TGUID;
begin
  CreateGUID(LTep);
  Result := GUIDToString(LTep);
end;



procedure TfrmMain.btnInitClick(Sender: TObject);
var
  a:OleVariant;
begin
  sconn.Open;
  sconn.AppServer.GetData('tb_Department','1=1',a);
  dsTemp.Data:=a;
  sconn.Close;
end;

procedure TfrmMain.actSaveExecute(Sender: TObject);
begin
   if dsTemp.State in [dsEdit,dsInsert] then
   begin
     dsTemp.Post;
     EnableControl(False);
   end;
end;

procedure TfrmMain.btnSaveClick(Sender: TObject);
begin
  actSave.Execute;
end;

procedure TfrmMain.btnCancelClick(Sender: TObject);
begin
  actCancel.Execute;
end;

procedure TfrmMain.actCancelExecute(Sender: TObject);
begin
  if dsTemp.State in [dsEdit,dsInsert] then
  begin
    dsTemp.Cancel;
    EnableControl(False);
  end;
end;

procedure TfrmMain.btn2Click(Sender: TObject);
begin

  actDelete.Execute;
end;

procedure TfrmMain.actDeleteExecute(Sender: TObject);
begin
  if dsTemp.eof and dsTemp.bof then exit;
  if MessageDlg('是否删除?',mtWarning,[mbYes,mbNo],-1)=mrYes then
  begin
    dsTemp.Delete;
  end;
end;

procedure TfrmMain.btnModifyClick(Sender: TObject);
begin
  if dsTemp.Active then
  if dsTemp.eof and dsTemp.bof then exit;
  actModify.Execute;
end;

procedure TfrmMain.btnNewClick(Sender: TObject);
begin
  if dsTemp.Active then
  actCreate.Execute;
end;

procedure TfrmMain.actCreateExecute(Sender: TObject);
begin
  frmCreate:=TfrmCreate.Create(self);
  try
    frmCreate.IsCreate:=True;
    if  frmCreate.ShowModal=mrOK then
    begin
      EnableControl(true);
    end;
  finally
    frmCreate.Free;
  end;
end;

procedure TfrmMain.actModifyExecute(Sender: TObject);
begin
  frmCreate:=TfrmCreate.Create(self);
  try
    frmCreate.IsCreate:=False;
    if  frmCreate.ShowModal=mrOK then
    begin
      EnableControl(true);
    end;
  finally
    frmCreate.Free;
  end;
end;

procedure TfrmMain.EnableControl(Flag: Boolean);
begin
  btnCancel.Enabled:=Flag;
  btnSave.Enabled:=Flag;
  btnNew.Enabled:=not Flag;
  btnModify.Enabled:=not Flag;
end;

procedure TfrmMain.btnPostDataClick(Sender: TObject);
var
  b:OleVariant;
begin
  //先进行保存
  actSave.Execute;
  sconn.Open;
  sconn.AppServer.PostData('tb_Department',dstemp.Data,b);
  sconn.AppServer.GetData('tb_Department','1=1',b);
  dsTemp.Data:=b;
  sconn.Close;    
end;

procedure TfrmMain.dsTempAfterInsert(DataSet: TDataSet);
begin
  dsTemp.FieldByName('FKey').AsString:=GetGUID;
end;

end.C


dfm代码
object frmMain: TfrmMain
  Left = 724
  Top = 400
  Width = 588
  Height = 369
  Caption = 'frmMain'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object btnInit: TButton
    Left = 88
    Top = 285
    Width = 75
    Height = 25
    Caption = #21152#36733#25968#25454
    TabOrder = 0
    OnClick = btnInitClick
  end
  object dbgrdDep: TDBGrid
    Left = 0
    Top = 41
    Width = 572
    Height = 204
    Align = alTop
    DataSource = ds3
    Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'MS Sans Serif'
    TitleFont.Style = []
  end
  object pnl1: TPanel
    Left = 0
    Top = 0
    Width = 572
    Height = 41
    Align = alTop
    TabOrder = 2
    object btnNew: TButton
      Left = 15
      Top = 7
      Width = 75
      Height = 25
      Caption = #26032#24314
      TabOrder = 0
      OnClick = btnNewClick
    end
    object btnModify: TButton
      Left = 107
      Top = 7
      Width = 75
      Height = 25
      Caption = #20462#25913
      TabOrder = 1
      OnClick = btnModifyClick
    end
    object btnSave: TButton
      Left = 198
      Top = 7
      Width = 75
      Height = 25
      Caption = #20445#23384
      Enabled = False
      TabOrder = 2
      OnClick = btnSaveClick
    end
    object btnCancel: TButton
      Left = 290
      Top = 7
      Width = 75
      Height = 25
      Caption = #21462#28040
      Enabled = False
      TabOrder = 3
      OnClick = btnCancelClick
    end
    object btn2: TButton
      Left = 411
      Top = 7
      Width = 75
      Height = 25
      Caption = #21024#38500
      TabOrder = 4
      OnClick = btn2Click
    end
  end
  object btnPostData: TButton
    Left = 225
    Top = 284
    Width = 144
    Height = 25
    Caption = #25552#20132#25968#25454#21040#26381#21153#22120
    TabOrder = 3
    OnClick = btnPostDataClick
  end
  object sconn: TSocketConnection
    ServerGUID = '{82AEC5B8-E53F-4725-A24D-456FD570E355}'
    ServerName = 'Project1.TestService'
    Host = '10.10.60.3'
    Left = 107
    Top = 143
  end
  object ds3: TDataSource
    DataSet = dsTemp
    Left = 255
    Top = 151
  end
  object dsTemp: TClientDataSet
    Aggregates = <>
    Params = <>
    RemoteServer = sconn
    AfterInsert = dsTempAfterInsert
    Left = 191
    Top = 147
  end
  object actlst1: TActionList
    Left = 289
    Top = 264
    object actCreate: TAction
      Caption = 'actCreate'
      OnExecute = actCreateExecute
    end
    object actModify: TAction
      Caption = 'actModify'
      OnExecute = actModifyExecute
    end
    object actSave: TAction
      Caption = 'actSave'
      OnExecute = actSaveExecute
    end
    object actCancel: TAction
      Caption = 'actCancel'
      OnExecute = actCancelExecute
    end
    object actDelete: TAction
      Caption = 'actDelete'
      OnExecute = actDeleteExecute
    end
  end
end

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

代码如下

unit ufrmCreate;

interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,DBClient,DB;


type
  TfrmCreate = class(TForm)
    edtName: TEdit;
    edtSex: TEdit;
    edtAge: TEdit;
    edtMobile: TEdit;
    mmoRemark: TMemo;
    lbl1: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    lbl4: TLabel;
    lbl5: TLabel;
    btnSave: TButton;
    btnCancel: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
  private
    FIsCreate: Boolean;
    FcdsDep: TClientDataSet;
    procedure SetIsCreate(const Value: Boolean);
    procedure init;
    { Private declarations }
  public
    property IsCreate:Boolean  read FIsCreate write SetIsCreate;
    property cdsDep:TClientDataSet  read FcdsDep write  FcdsDep;
  end;


var
  frmCreate: TfrmCreate;


implementation
    uses ufrmMain;
{$R *.dfm}


{ TfrmCreate }


procedure TfrmCreate.SetIsCreate(const Value: Boolean);
begin
  FIsCreate := Value;
  if IsCreate then
    Caption:='Create'
  else
    Caption:='Modify';
end;


procedure TfrmCreate.FormCreate(Sender: TObject);
begin
  cdsDep:=TClientDataSet.Create(Self);
end;


procedure TfrmCreate.FormDestroy(Sender: TObject);
begin
  cdsDep.Free;
end;


procedure TfrmCreate.FormShow(Sender: TObject);
begin   
  if IsCreate then
  begin
    frmMain.dsTemp.Insert;
  end else
  begin
    init;
    frmMain.dsTemp.Edit;
  end;
end;


procedure TfrmCreate.btnSaveClick(Sender: TObject);
begin
  if edtName.Text=''  then
  begin
    ShowMessage('姓名不能为空');
    Exit;
  end;
  if edtMobile.Text='' then
  begin
     ShowMessage('电话号码不能为空');
     exit;
  end;
  if frmMain.dsTemp.State in [dsEdit,dsInsert] then
  begin
    frmMain.dsTemp.fieldbyName('FName').AsString:=edtName.Text;
    frmMain.dsTemp.fieldbyName('FSex').AsString:=edtSex.Text;
    frmMain.dsTemp.fieldbyName('FAge').AsString:=edtAge.Text;
    frmMain.dsTemp.fieldbyName('FMobile').AsString:=edtMobile.Text;
    frmMain.dsTemp.fieldbyName('FRemark').AsString:=mmoRemark.Text;
    ModalResult:=mrOk;
  end else
    ModalResult:=mrCancel;
end;


procedure TfrmCreate.init;
begin
  edtName.Text:=frmMain.dsTemp.fieldbyName('FName').AsString;
  edtSex.Text:=frmMain.dsTemp.fieldbyName('FSex').AsString;
  edtAge.Text:=frmMain.dsTemp.fieldbyName('FAge').AsString;
  edtMobile.Text:=frmMain.dsTemp.fieldbyName('FMobile').AsString;
  mmoRemark.Text:=frmMain.dsTemp.fieldbyName('FRemark').AsString;
end;


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管理软件
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值