您的位置:首页 > 编程语言 > Delphi

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

2014-10-24 15:04 435 查看
新建一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: