uadapterdatamodel.pas

来自「一整套的源代码」· PAS 代码 · 共 130 行

PAS
130
字号
unit UAdapterDataModel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UPrimaryDataModel, Provider, 
  DB, DBClient,
  MyModel, MyTools, ADODB;

type
  TAdapterDataModel = class(TPrimaryDataModel, IDataAdapter)
    procedure DataSetAfterEdit(DataSet: TDataSet);
  private
    function FindFieldByName(const FieldName: string): Integer;
    procedure PrepareValue;
    procedure RefreshDataSet;
  public
    procedure OpenDataSet; override;
{---------------------------------------- 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
      ClientDataSet.Append;
    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 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
end;

procedure TAdapterDataModel.Save(Parameters: IParameters);
begin
  try
    ClientDataSet.Edit;
    ClientDataSet.ApplyUpdates(0);
    RefreshDataSet;
  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;

procedure TAdapterDataModel.OpenDataSet;
begin
  inherited;
end;

procedure TAdapterDataModel.RefreshDataSet;
begin
  if not ClientDataSet.Modified and (ClientDataSet.ChangeCount = 0) then
  begin
    ClientDataSet.Close;
    DataSet.Close;
    ClientDataSet.Open;
  end;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?