uquerydatamodel.pas

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

PAS
76
字号
unit UQueryDataModel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UPrimaryDataModel, Provider, OraProvider, MemDS, DBAccess, Ora,
  OraSmart, DB, DBClient,
  MyTools, MyModel, UAdapterDataModel;

type
  TQueryDataModel = class(TAdapterDataModel, IQuery)
  protected
    procedure PrepareQuery(Parameters: MyTools.IQueryParameters); virtual; abstract;
  public
{---------------------------------------- IQuery ----------------------------------------}
    function Query(Parameters: MyTools.IParameters): Integer; virtual;
  public
    constructor Create(Owner: TComponent); override;
    procedure Refresh(Parameters: IParameters); override;
  end;

implementation

uses
  MyException;

{$R *.dfm}


constructor TQueryDataModel.Create(Owner: TComponent);
begin
  inherited;
  AutoOpenDataSet := False;
end;

function TQueryDataModel.Query(Parameters: IParameters): Integer;
var
  P: IQueryParameters;
begin
  DataSet.Close;
  DataSet.DisableControls;
  try
    try
      P := IQueryParameters(Parameters);
    except
      on E: Exception do
        raise EQueryParameters.Create(Self.ClassName, E.Message);
    end;

    ClientDataSet.Close;
    DataSet.Close;
    PrepareQuery(P);

    try
      DataSet.Open;
      ClientDataSet.Open;
    except
      on E: Exception do
        raise EOpenDataSetException.Create(Self.ClassName, E.Message);
    end;
  finally
    DataSet.EnableControls;
    P := nil;
    Result := 0;
  end;
end;

procedure TQueryDataModel.Refresh(Parameters: IParameters);
begin
  Query(Parameters)
end;

end.

⌨️ 快捷键说明

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