Delphi 实现界面和业务分离(2)-界面和业务分离演化实例

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, ExtCtrls, DBCtrls, StdCtrls, Grids, DBGrids, Mask,
  Buttons;

type
  TForm1 = class(TForm)
    btnQryByName: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    btnExit: TButton;
    edtQryByName: TLabeledEdit;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBGrid1: TDBGrid;
    dbcbSex: TDBComboBox;
    dbcbDep: TDBComboBox;
    DataSource1: TDataSource;
    adqDep: TADOQuery;
    adqUser: TADOQuery;
    btnUpdate: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure btnQryByNameClick(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure btnUpdateClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  ADO_STRING='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=wz.mdb;Persist Security Info=False' ;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
  var
  i: Integer;
  tmpstrs: TStrings;
begin
  tmpstrs:=TStringlist.Create;
  with adqDep do
  try
    ConnectionString:=ADO_STRING;
    sql.Clear;
    sql.add('select * from M_BMBM');
    Open;
    for i:=1 to  RecordCount do
    begin
      tmpstrs.Add(Fieldbyname('BMMC').AsString);
      Next;
    end;
    Close;
  finally
    Close;
  end;
  dbcbDep.Items:=tmpstrs;
end;

procedure TForm1.btnQryByNameClick(Sender: TObject);
begin
    with  adqUser do
    begin
      close;
      ConnectionString:=ADO_STRING;
      Parameters.ParamByName('name').value:='%'+edtQryByName.Text+'%';
      open;
    end;
    btnUpdate.Enabled:=true;
end;

procedure TForm1.btnExitClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.btnUpdateClick(Sender: TObject);
begin
  adqUser.Post;
end;

end.

 

unit ufrmUsers;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBClient, StdCtrls, DBCtrls, Grids, DBGrids, Mask, ExtCtrls,
  Buttons,uUserMaint;

type
  TfrmUsers = class(TForm)
    btnExit: TButton;
    btnQryByName: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    edtQryByName: TLabeledEdit;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBGrid1: TDBGrid;
    dbcbSex: TDBComboBox;
    dbcbDep: TDBComboBox;
    DataSource1: TDataSource;
    cdsUserMaint: TClientDataSet;
    cdsUserMaintID: TWideStringField;
    cdsUserMaintNAME: TWideStringField;
    cdsUserMaintSEX: TWideStringField;
    cdsUserMaintJOB: TWideStringField;
    cdsUserMaintTEL: TWideStringField;
    cdsUserMaintCALL: TWideStringField;
    cdsUserMaintDEP: TWideStringField;
    cdsUserMaintGROUP_ID: TWideStringField;
    cdsUserMaintPASSWORD: TWideStringField;
    btnUpdate: TBitBtn;
    procedure btnUpdateClick(Sender: TObject);
    procedure btnQryByNameClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    objUsers:TUserMaint;
  public
    { Public declarations }
  end;

const
  M_TITLE='操作提示';//所有提示对话框的标题

implementation

{$R *.dfm}

procedure TfrmUsers.btnUpdateClick(Sender: TObject);
var nErr:integer;
begin
  if cdsUserMaint.State=dsEdit then cdsUserMaint.Post;
  if (cdsUserMaint.ChangeCount > 0) then
  begin
    objUsers.UpdateUserData(cdsUserMaint.Delta,nErr);
    if nErr>0 then
       application.MessageBox('更新失败!',M_TITLE,MB_ICONWARNING)
    else
    begin
      application.MessageBox('更新成功!',M_TITLE,MB_ICONINFORMATION) ;
      btnQryByNameClick(nil);
    end;
  end;
end;

procedure TfrmUsers.btnQryByNameClick(Sender: TObject);
begin
  btnUpdate.Enabled:=true;
  dbcbDep.Items.AddStrings(objUsers.GetDepList);
  cdsUserMaint.Active:=false;
  cdsUserMaint.Data:=objUsers.GetUserList(edtQryByName.Text);
  cdsUserMaint.Active:=True;
end;

procedure TfrmUsers.FormCreate(Sender: TObject);
begin
  objUsers:=TUserMaint.Create;
end;

procedure TfrmUsers.btnExitClick(Sender: TObject);
begin
  close;
end;

procedure TfrmUsers.FormDestroy(Sender: TObject);
begin
  objUsers.Free;
end;

end.

unit uUserMaint;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes,DBClient,udmUser;

type
  TUserMaint = class (TObject)
  private
    UserDM:TUserDM;
  public
    function GetDepList: TStrings;
    function GetUserList(strName:String): OLEVariant;
    procedure UpdateUserData(UserData:OleVariant;out ErrCount: Integer);
    constructor create;
    destructor Destroy;override;
  end;
  
implementation


{
********************************** TUserMaint **********************************
}
constructor TUserMaint.create;
begin
  UserDM:=TUserDM.Create(nil);
end;

destructor TUserMaint.Destroy;
begin
  freeandnil(UserDM);
  inherited;
end;

function TUserMaint.GetDepList: TStrings;
var
  i: Integer;
  tmpstrs: TStrings;
begin
  tmpstrs:=TStringlist.Create;
  
  with UserDM do
  try
    if not adcUser.Connected then
       adcUser.Connected:=True;
    adqTemp.sql.Clear;
    adqTemp.sql.add('select * from M_BMBM');
    adqTemp.Open;
    for i:=1 to  adqTemp.RecordCount do
    begin
      tmpstrs.Add(adqTemp.Fieldbyname('BMMC').AsString);
      adqTemp.Next;
    end;
    adqTemp.Close;
    result:=tmpstrs;
  finally
    adcUser.Connected:=False;
  end;
end;

function TUserMaint.GetUserList(strName:String): OLEVariant;
begin
  with UserDM do
  try
    if not adcUser.Connected then
       adcUser.Connected:=True;
    with  adqByName do
    begin
      close;
      Parameters.ParamByName('name').value:='%'+strName+'%';
      open;
      result:=dspUser.Data;
    end;
  finally
    adcUser.Connected:=False;
  end;
end;

procedure TUserMaint.UpdateUserData(UserData:OleVariant;out ErrCount: Integer);
begin
  UserDM.dspUser.ApplyUpdates(UserData,0,ErrCount);
end;

end.

unit udmUser;

interface

uses
  SysUtils, Classes, DBClient, Provider, DB, ADODB;

type
  TUserDM = class(TDataModule)
    adcUser: TADOConnection;
    adqByName: TADOQuery;
    dspUser: TDataSetProvider;
    adqTemp: TADOQuery;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  ADO_STRING='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=wz.mdb;Persist Security Info=False' ;

implementation

{$R *.dfm}

procedure TUserDM.DataModuleCreate(Sender: TObject);
begin
  adcUser.ConnectionString:=ADO_STRING;
end;

end.

 

unit uIUserMaint;

interface

uses
 Classes;

type
  TIUserMaint = class (TObject)
  public
    function GetDepList: TStrings;virtual;abstract;
    function GetUserList(strName:String): OLEVariant;virtual;abstract;
    procedure UpdateUserData(UserData:OleVariant;out  ErrCount: Integer);virtual;abstract;
    constructor create;virtual;abstract;
  end;
  TIUserMaintClass=class of TIUserMaint;

implementation

end.

TIUserMaint = class (TObject)
  public
    function GetDepList: TStrings;virtual;abstract;
    function GetUserList(strName:String): OLEVariant;virtual;abstract;
    procedure UpdateUserData(UserData:OleVariant;out  ErrCount: Integer);virtual;abstract;
    constructor create;virtual;abstract;
  end;

unit ufrmUsers;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBClient, StdCtrls, DBCtrls, Grids, DBGrids, Mask, ExtCtrls,
  Buttons,uIUserMaint;

type
  TfrmUsers = class(TForm)
    btnExit: TButton;
    btnQryByName: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    edtQryByName: TLabeledEdit;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBGrid1: TDBGrid;
    dbcbSex: TDBComboBox;
    dbcbDep: TDBComboBox;
    DataSource1: TDataSource;
    cdsUserMaint: TClientDataSet;
    cdsUserMaintID: TWideStringField;
    cdsUserMaintNAME: TWideStringField;
    cdsUserMaintSEX: TWideStringField;
    cdsUserMaintJOB: TWideStringField;
    cdsUserMaintTEL: TWideStringField;
    cdsUserMaintCALL: TWideStringField;
    cdsUserMaintDEP: TWideStringField;
    cdsUserMaintGROUP_ID: TWideStringField;
    cdsUserMaintPASSWORD: TWideStringField;
    btnUpdate: TBitBtn;
    procedure btnUpdateClick(Sender: TObject);
    procedure btnQryByNameClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    objUsers:TIUserMaint;
  public
    { Public declarations }
  end;

var
  frmUsers: TfrmUsers;

const
  M_TITLE='操作提示';//所有提示对话框的标题

  implementation

{$R *.dfm}
function TObjUsers:TIUserMaintClass;
  external 'UserSvr.dll';
  
procedure TfrmUsers.btnUpdateClick(Sender: TObject);
var nErr:integer;
begin
  if cdsUserMaint.State=dsEdit then cdsUserMaint.Post;
  if (cdsUserMaint.ChangeCount > 0) then
  begin
    objUsers.UpdateUserData(cdsUserMaint.Delta,nErr);
    if nErr>0 then
       application.MessageBox('更新失败!',M_TITLE,MB_ICONWARNING)
    else
    begin
      application.MessageBox('更新成功!',M_TITLE,MB_ICONINFORMATION) ;
      btnQryByNameClick(nil);
    end;
  end;
end;

procedure TfrmUsers.btnQryByNameClick(Sender: TObject);
begin
  btnUpdate.Enabled:=true;
  dbcbDep.Items.AddStrings(objUsers.GetDepList);
  cdsUserMaint.Active:=false;
  cdsUserMaint.Data:=objUsers.GetUserList(edtQryByName.Text);
  cdsUserMaint.Active:=True;
end;

procedure TfrmUsers.FormCreate(Sender: TObject);
begin
  objUsers:=TObjUsers.Create;
end;

procedure TfrmUsers.btnExitClick(Sender: TObject);
begin
  close;
end;

procedure TfrmUsers.FormDestroy(Sender: TObject);
begin
  objUsers.Free;
end;

end.

 

转载于:https://www.cnblogs.com/YiShen/p/9872047.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值