📄 frmusermngimpl.pas
字号:
unit FrmUserMngImpl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGridEh, ComCtrls, ToolWin, DB, ADODB, Provider,
DBClient, ImgList, ActnList, StdCtrls, Mask, DBCtrls, FrmMainImpl, Temp,
DBCtrlsEh, ExtCtrls, SUIForm;
type
TFrmUserMng = class(TForm)
sfrMain: TsuiForm;
imgSt: TImage;
atlAtions: TActionList;
actNew: TAction;
actSave: TAction;
actCancel: TAction;
actFirst: TAction;
actPrior: TAction;
actNext: TAction;
actLast: TAction;
actDelete: TAction;
actClose: TAction;
imlAction: TImageList;
dtsMain: TDataSource;
cdsMain: TClientDataSet;
cdsMainUSER_ID: TWideStringField;
cdsMainUSER_NAME: TWideStringField;
cdsMainUSER_PSWD: TWideStringField;
cdsMainUNIT_ID: TWideStringField;
pvdMain: TDataSetProvider;
qryMain: TADOQuery;
conMain: TADOConnection;
qryPublic: TADOQuery;
lblUserName: TLabel;
lblUnitID: TLabel;
clbMain: TCoolBar;
tlbStandard: TToolBar;
btnNew: TToolButton;
btnSep1: TToolButton;
btnSave: TToolButton;
btnCancel: TToolButton;
btnSep2: TToolButton;
btnFirst: TToolButton;
btnPrior: TToolButton;
btnNext: TToolButton;
btnLast: TToolButton;
btnSep4: TToolButton;
btnDelete: TToolButton;
btnSep6: TToolButton;
btnClose: TToolButton;
edtUserName: TDBEdit;
cmbUnitID: TDBComboBoxEh;
cdsMainENSURE_PSWD: TWideStringField;
lblUserPswd: TLabel;
edtUserPswd: TDBEdit;
lblEnsurePswd: TLabel;
edtEnsurePswd: TDBEdit;
grdMain: TDBGridEh;
grpMain: TGroupBox;
chkSA: TDBCheckBox;
chkBCN: TDBCheckBox;
chkMDN: TDBCheckBox;
chkQRN: TDBCheckBox;
cmdPublic: TADOCommand;
cdsMainIF_ADMIN: TBooleanField;
cdsMainIF_BCN: TBooleanField;
cdsMainIF_MDN: TBooleanField;
cdsMainIF_QRN: TBooleanField;
procedure FormCreate(Sender: TObject);
procedure actFirstExecute(Sender: TObject);
procedure actPriorExecute(Sender: TObject);
procedure actNextExecute(Sender: TObject);
procedure actLastExecute(Sender: TObject);
procedure actNewExecute(Sender: TObject);
procedure actSaveExecute(Sender: TObject);
procedure actCancelExecute(Sender: TObject);
procedure actDeleteExecute(Sender: TObject);
procedure actCloseExecute(Sender: TObject);
procedure cdsMainBeforeDelete(DataSet: TDataSet);
procedure cdsMainAfterOpen(DataSet: TDataSet);
procedure cdsMainAfterClose(DataSet: TDataSet);
procedure cdsMainAfterInsert(DataSet: TDataSet);
procedure cdsMainAfterScroll(DataSet: TDataSet);
procedure cdsMainAfterDelete(DataSet: TDataSet);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cdsMainBeforePost(DataSet: TDataSet);
procedure FormDestroy(Sender: TObject);
procedure dtsMainStateChange(Sender: TObject);
procedure pvdMainBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
private
{ Private declarations }
protected
FStatus: Integer;
FModified: Boolean;
procedure ShowActionStatus; virtual;
function GetDeleteConfirmMessage(): string; virtual;
function GetDocCanModify(): Boolean; virtual;
function GetDocCanDelete(): Boolean; virtual;
function GetDocCanCancel(): Boolean; virtual;
public
property DocCanModify: Boolean read GetDocCanModify;
property DocCanDelete: Boolean read GetDocCanDelete;
property DocCanCancel: Boolean read GetDocCanCancel;
end;
var
FrmUserMng: TFrmUserMng;
implementation
{$R *.dfm}
procedure TFrmUserMng.FormCreate(Sender: TObject);
begin
FStatus := STATUS_INACTIVE;
end;
procedure TFrmUserMng.ShowActionStatus;
begin
if (FStatus = STATUS_BROWSE) and ((cdsMain.State = dsInsert) or (cdsMain.State = dsEdit)) then
FStatus := STATUS_EDIT;
case FStatus of
STATUS_INACTIVE:
begin
actNew.Enabled := False;
actSave.Enabled := False;
actCancel.Enabled := False;
actFirst.Enabled := False;
actPrior.Enabled := False;
actNext.Enabled := False;
actLast.Enabled := False;
actDelete.Enabled := False;
end;
STATUS_BROWSE:
begin
actNew.Enabled := True;
actSave.Enabled := False;
actCancel.Enabled := False;
actFirst.Enabled := dtsMain.DataSet.RecNo > 1;
actPrior.Enabled := actFirst.Enabled;
actNext.Enabled := (dtsMain.DataSet.RecordCount > 0)
and (dtsMain.DataSet.RecNo < dtsMain.DataSet.RecordCount);
actLast.Enabled := actNext.Enabled;
actDelete.Enabled := DocCanDelete;
(TClientDataSet(dtsMain.DataSet)).ReadOnly := False or (not DocCanModify) or
(dtsMain.DataSet.RecordCount = 0);
end;
STATUS_EDIT:
begin
actNew.Enabled := False;
actSave.Enabled := True;
actCancel.Enabled := True;
actFirst.Enabled := False;
actPrior.Enabled := False;
actNext.Enabled := False;
actLast.Enabled := False;
actDelete.Enabled := dtsMain.DataSet.RecNo > 0;
end;
end;
end;
procedure TFrmUserMng.actFirstExecute(Sender: TObject);
begin
cdsMain.First();
ShowActionStatus();
end;
procedure TFrmUserMng.actPriorExecute(Sender: TObject);
begin
cdsMain.Prior();
ShowActionStatus();
end;
procedure TFrmUserMng.actNextExecute(Sender: TObject);
begin
cdsMain.Next();
ShowActionStatus();
end;
procedure TFrmUserMng.actLastExecute(Sender: TObject);
begin
cdsMain.Last();
ShowActionStatus();
end;
procedure TFrmUserMng.actNewExecute(Sender: TObject);
begin
(TClientDataSet(dtsMain.DataSet)).ReadOnly := False;
dtsMain.DataSet.Append;
FStatus := STATUS_EDIT;
FModified := True;
if (Visible) then
ShowActionStatus();
end;
procedure TFrmUserMng.actSaveExecute(Sender: TObject);
begin
if (cdsMain.State = dsEdit) or (cdsMain.State = dsInsert) then
cdsMain.Post();
try
Screen.Cursor := crHourGlass;
if (cdsMain.ApplyUpdates(0) > 0) then
begin
ShowMessage('更新数据失败。');
Abort;
end;
cdsMain.MergeChangeLog;
cdsMain.CancelUpdates;
FStatus := STATUS_BROWSE;
FModified := False;
ShowActionStatus();
Screen.Cursor := crDefault;
except
on E: Exception do
begin
Screen.Cursor := crDefault;
ShowMessage(E.Message);
end;
end;
end;
procedure TFrmUserMng.actCancelExecute(Sender: TObject);
begin
(TClientDataSet(dtsMain.DataSet)).CancelUpdates();
FStatus := STATUS_BROWSE;
FModified := False;
ShowActionStatus();
end;
procedure TFrmUserMng.actDeleteExecute(Sender: TObject);
var
boolReadOnly: Boolean;
begin
dtsMain.DataSet.Delete;
(TClientDataSet(dtsMain.DataSet)).ApplyUpdates(0);
FStatus := STATUS_BROWSE;
FModified := False;
ShowActionStatus();
end;
procedure TFrmUserMng.actCloseExecute(Sender: TObject);
begin
Close();
end;
procedure TFrmUserMng.cdsMainBeforeDelete(DataSet: TDataSet);
begin
if (Application.MessageBox(PChar(GetDeleteConfirmMessage()),
PChar(Caption), MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = ID_NO) then
Abort;
end;
function TFrmUserMng.GetDeleteConfirmMessage: string;
begin
result := '您确定要删除当前记录吗?';
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -