⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uadapterdatamodel.pas

📁 Software Requirements1. Delphi 6 SP22. Oracle 8i R33. Raize 3.0.94. ExpressQuantumGrid 4.505. Expres
💻 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;
    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;
      PrepareValue;
      SetIsModified(True);
    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
  if not GetDataSet.Active 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);
      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
    ClientDataSet.Refresh;
end;

end.

⌨️ 快捷键说明

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