📄 uadapterdatamodel.pas
字号:
unit UAdapterDataModel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UPrimaryDataModel, Provider, OraProvider, MemDS, DBAccess, Ora,
OraSmart, DB, DBClient,
MyModel, MyTools, ADODB;
type
TAdapterDataModel = class(TPrimaryDataModel, IDataAdapter)
procedure DataSetAfterEdit(DataSet: TDataSet);
private
function FindFieldByName(const FieldName: string): Integer;
procedure PrepareValue;
public
{---------------------------------------- IDataAdapter ----------------------------------------}
procedure Append(Parameters: MyTools.IParameters); virtual;
procedure Save(Parameters: MyTools.IParameters); virtual;
procedure Delete(Parameters: MyTools.IParameters); virtual;
procedure Cancel(Parameters: MyTools.IParameters); virtual;
function CheckValue: Boolean; virtual;
end;
implementation
uses
MyException, UMPSysEnv;
const
S_CREATEBY = 'CreateBy';
S_UPDATEBY = 'UpdateBy';
S_APPROVEBY = 'ApproveBy';
{$R *.dfm}
procedure TAdapterDataModel.Append(Parameters: IParameters);
begin
if ClientDataSet.Active and not ClientDataSet.ReadOnly then
try
DataSet.Edit;
ClientDataSet.Edit;
ClientDataSet.Append;
PrepareValue;
except
on E: Exception do
raise EAppendException.Create(Self.ClassName, E.Message)
end;
end;
procedure TAdapterDataModel.Cancel(Parameters: IParameters);
begin
if IsModified and ClientDataSet.Active and not ClientDataSet.IsEmpty then
try
ClientDataSet.CancelUpdates;
except
on E: Exception do
raise ECancelException.Create(Self.ClassName, E.Message);
end;
end;
procedure TAdapterDataModel.Delete(Parameters: IParameters);
begin
if ClientDataSet.Active and not ClientDataSet.IsEmpty then
try
ClientDataSet.Delete
except
on E: Exception do
raise EDeleteException.Create(Self.ClassName, E.Message);
end;
end;
function TAdapterDataModel.FindFieldByName(const FieldName: string): Integer;
var
I: Integer;
begin
Result := -1;
for I := 0 to GetDataSet.FieldCount - 1 do
if UpperCase(Trim(GetDataSet.Fields[I].FieldName)) = UpperCase(Trim(FieldName)) then
begin
Result := I;
Exit;
end;
end;
procedure TAdapterDataModel.PrepareValue;
begin
if not GetDataSet.Active or GetDataSet.IsEmpty then
Exit;
if FindFieldByName(S_CREATEBY) >= 0 then
if GetDataSet.FieldByName(S_CREATEBY).IsNull then
GetDataSet.FieldByName(S_CREATEBY).AsInteger := MPSysEnv.EmployeeKey.GetKey;
if FindFieldByName(S_UPDATEBY) >= 0 then
GetDataSet.FieldByName(S_UPDATEBY).AsInteger := MPSysEnv.EmployeeKey.GetKey;
if FindFieldByName(S_APPROVEBY) >= 0 then
GetDataSet.FieldByName(S_APPROVEBY).AsInteger := MPSysEnv.EmployeeKey.GetKey;
end;
procedure TAdapterDataModel.Save(Parameters: IParameters);
begin
if ClientDataSet.Active then
try
if not CheckValue then Exit;
ClientDataSet.Edit;
ClientDataSet.ApplyUpdates(0);
ClientDataSet.Refresh;
except
on E: Exception do
raise ESaveException.Create(Self.ClassName, E.Message);
end;
end;
procedure TAdapterDataModel.DataSetAfterEdit(DataSet: TDataSet);
begin
inherited;
PrepareValue;
end;
function TAdapterDataModel.CheckValue: Boolean;
begin
Result := True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -