rmd_dbwrap.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,020 行 · 第 1/3 页

PAS
1,020
字号
          if (lParamText <> '') or (VarType(ParamValue[i]) = varEmpty) then
            ParamValue[i] := ParentReport.Parser.Calc(lParamText);
        end;
      end;
      Inc(i);
    end;
  except
    Memo.Clear;
    Memo.Add(ParamText[i]);
    //    raise;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
type
  TSQLBuilderEditor = class(TELStringPropEditor)
  protected
    function GetAttrs: TELPropAttrs; override;
    procedure Edit; override;
  end;

  TQueryParamsEditor = class(TELStringPropEditor)
  protected
    function GetAttrs: TELPropAttrs; override;
    procedure Edit; override;
  end;

  TDataSourceEditor = class(TELStringPropEditor)
  protected
    function GetAttrs: TELPropAttrs; override;
    procedure GetValues(AValues: TStrings); override;
  end;

  TMasterFieldsEditor = class(TELStringPropEditor)
  protected
    function GetAttrs: TELPropAttrs; override;
    procedure Edit; override;
  end;

  TRMDQuery_DataSourceEditor = class(TELStringPropEditor)
  protected
    function GetAttrs: TELPropAttrs; override;
    procedure GetValues(AValues: TStrings); override;
  end;

  {------------------------------------------------------------------------------}
  {------------------------------------------------------------------------------}
  { TSQLBuilderEditor }

function TSQLBuilderEditor.GetAttrs: TELPropAttrs;
begin
  Result := [praDialog, praReadOnly];
end;

procedure TSQLBuilderEditor.Edit;
var
  tmp: TRMDQueryDesignerForm;
begin
  tmp := TRMDQueryDesignerForm.Create(nil);
  try
    tmp.Query := TRMDQuery(GetInstance(0));
    if tmp.ShowModal = mrOK then
    begin
      RMDesigner.BeforeChange;
      //      RMDesigner.AfterChange;
    end;
  finally
    tmp.Free;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TQueryParamsEditor }

function TQueryParamsEditor.GetAttrs: TELPropAttrs;
begin
  Result := [praDialog, praReadOnly];
end;

procedure TQueryParamsEditor.Edit;
var
  liQuery: TRMDQuery;
  tmp: TRMDParamsForm;
begin
  liQuery := TRMDQuery(GetInstance(0));
  if liQuery.ParamCount > 0 then
  begin
    tmp := TRMDParamsForm.Create(nil);
    try
      tmp.Query := liQuery;
      tmp.Caption := liQuery.Name + ' ' + RMLoadStr(SParams);
      if tmp.ShowModal = mrOk then
      begin
        RMDesigner.BeforeChange;
      end;
    finally
      tmp.Free;
    end;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TDataSourceEditor }

function TDataSourceEditor.GetAttrs: TELPropAttrs;
begin
  Result := [praValueList, praSortList];
end;

procedure TDataSourceEditor.GetValues(AValues: TStrings);
var
  liDataSet: TDataSet;
begin
  liDataSet := TRMDDataSet(GetInstance(0)).FDataSet;
  RMGetComponents(liDataSet.Owner, TDataSet, AValues, liDataSet);
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TMasterFieldsEditor }

function TMasterFieldsEditor.GetAttrs: TELPropAttrs;
begin
  Result := [praDialog, praReadOnly];
end;

procedure TMasterFieldsEditor.Edit;
var
  lTable: TRMDTable;
  tmp: TRMDFieldsLinkForm;
begin
  lTable := TRMDTable(GetInstance(0));
  tmp := TRMDFieldsLinkForm.Create(nil);
  try
    tmp.MasterDS := TDataSet(RMFindComponent(lTable.FDataSet.Owner, lTable.MasterSource));
    tmp.DetailDS := lTable;
    if (tmp.MasterDS <> nil) and tmp.Edit then
    begin
      RMDesigner.BeforeChange;
      if tmp.FullIndexName <> '' then
        lTable.IndexName := tmp.DataSetProxy.IndexName
      else
        lTable.IndexFieldNames := tmp.DataSetProxy.IndexFieldNames;
      lTable.MasterFields := tmp.DataSetProxy.MasterFields;
      RMDesigner.AfterChange;
    end;
  finally
    tmp.Free;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{ TRMDQuery_DataSourceEditor }

function TRMDQuery_DataSourceEditor.GetAttrs: TELPropAttrs;
begin
  Result := [praValueList, praSortList];
end;

procedure TRMDQuery_DataSourceEditor.GetValues(AValues: TStrings);
var
  liDataSet: TDataSet;
begin
  liDataSet := TRMDDataSet(GetInstance(0)).FDataSet;
  RMGetComponents(liDataSet.Owner, TDataSet, AValues, liDataSet);
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}

procedure TRMDDataset_FieldByName(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := O2V(TRMDDataSet(Args.Obj).DataSet.FieldByName(Args.Values[0]));
end;

procedure TRMDDataset_FieldByVariant(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.FieldByName(Args.Values[0]).AsVariant;
end;

procedure TRMDDataset_FieldByString(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.Fields[Args.Values[0]].AsString;
end;

procedure TRMDDataset_FieldByNumber(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.Fields[Args.Values[0]].AsVariant;
end;

procedure TRMDDataset_FieldByBoolean(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.Fields[Args.Values[0]].AsBoolean;
end;

procedure TRMDDataset_FieldByDateTime(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.Fields[Args.Values[0]].AsDateTime;
end;

procedure TRMDDataset_Open(var Value: Variant; Args: TJvInterpreterArgs);
var
  liDataSet: TRMDDataSet;
  liComponent: TComponent;
  liDataSource: TDataSource;
begin
  liDataSet := TRMDDataSet(Args.Obj);
  if liDataSet is TRMDQuery then
  begin
    liComponent := RMFindComponent(liDataSet.DataSet.Owner, TRMDQuery(liDataSet).DataSource);
    if liComponent <> nil then
    begin
      liDataSource := RMGetDataSource(liDataSet.DataSet.Owner, TDataSet(liComponent));
      if (liDataSource <> nil) and (liDataSource.DataSet <> nil) then
        liDataSource.DataSet.Open;
    end;
  end;
  liDataSet.DataSet.Open;
end;

procedure TRMDDataset_Close(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TRMDDataSet(Args.Obj).DataSet.Close;
end;

procedure TRMDDataset_Next(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TRMDDataSet(Args.Obj).DataSet.Next;
end;

procedure TRMDDataset_Prior(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TRMDDataSet(Args.Obj).DataSet.Prior;
end;

procedure TRMDDataset_First(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TRMDDataSet(Args.Obj).DataSet.First;
end;

procedure TRMDDataset_Last(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TRMDDataSet(Args.Obj).DataSet.Last;
end;

procedure TRMDDataset_MoveBy(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TRMDDataSet(Args.Obj).DataSet.MoveBy(Args.Values[0]);
end;

procedure TRMDDataset_Locate(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.Locate(Args.Values[0], Args.Values[1], TLocateOptions(Byte(V2S(Args.Values[2]))));
end;

procedure TRMDDataset_Bof(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.Bof;
end;

procedure TRMDDataset_Eof(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := TRMDDataSet(Args.Obj).DataSet.Eof;
end;

procedure TRMDQuery_SetParamValue(var Value: Variant; Args: TJvInterpreterArgs);
begin
  TRMDQuery(Args.Obj).ParamValue[Args.Values[0]] := Args.Values[1];
end;

procedure TRMDQuery_SetParamValueByName(var Value: Variant; Args: TJvInterpreterArgs);
var
  i: Integer;
begin
  for i := 0 to TRMDQuery(Args.Obj).ParamCount - 1 do
  begin
    if AnsiCompareText(Args.Values[0], TRMDQuery(Args.Obj).ParamName[i]) = 0 then
    begin
      TRMDQuery(Args.Obj).ParamValue[i] := Args.Values[1];
      Break;
    end;
  end;
end;

const
	cReportMachine = 'RMD_DBWrap';

procedure RM_RegisterRAI2Adapter(RAI2Adapter: TJvInterpreterAdapter);
begin
  with RAI2Adapter do
  begin
    AddClass(cReportMachine, TRMDDataset, 'TRMDDataset');
    AddClass(cReportMachine, TRMDQuery, 'TRMDQuery');

    // TRMParamKind
    AddConst(cReportMachine, 'rmpkValue', rmpkValue);
    AddConst(cReportMachine, 'rmpkAssignFromMaster', rmpkAssignFromMaster);

    AddGet(TRMDDataset, 'FieldByName', TRMDDataset_FieldByName, 1, [0], varEmpty);
    AddGet(TRMDDataset, 'FieldByVariant', TRMDDataset_FieldByVariant, 1, [0], varEmpty);
    AddGet(TRMDDataset, 'FieldByString', TRMDDataset_FieldByString, 1, [0], varEmpty);
    AddGet(TRMDDataset, 'FieldByNumber', TRMDDataset_FieldByNumber, 1, [0], varEmpty);
    AddGet(TRMDDataset, 'FieldByBoolean', TRMDDataset_FieldByBoolean, 1, [0], varEmpty);
    AddGet(TRMDDataset, 'FieldByDateTime', TRMDDataset_FieldByDateTime, 1, [0], varEmpty);

    AddGet(TRMDDataset, 'Fields', TRMDDataset_FieldByName, 1, [0], varEmpty);
    AddGet(TRMDDataset, 'Open', TRMDDataset_Open, 0, [0], varEmpty);
    AddGet(TRMDDataset, 'Close', TRMDDataset_Close, 0, [0], varEmpty);
    AddGet(TRMDDataset, 'Next', TRMDDataset_Next, 0, [0], varEmpty);
    AddGet(TRMDDataset, 'Prior', TRMDDataset_Prior, 0, [0], varEmpty);
    AddGet(TRMDDataset, 'First', TRMDDataset_First, 0, [0], varEmpty);
    AddGet(TRMDDataset, 'Last', TRMDDataset_Last, 0, [0], varEmpty);
    AddGet(TRMDDataset, 'Last', TRMDDataset_MoveBy, 1, [0], varEmpty);
    AddGet(TRMDDataset, 'Locate', TRMDDataset_Locate, 3, [0], varEmpty);
    AddGet(TRMDDataset, 'Bof', TRMDDataset_Bof, 0, [0], varEmpty);
    AddGet(TRMDDataset, 'Eof', TRMDDataset_Eof, 0, [0], varEmpty);

    AddGet(TRMDQuery, 'SetParamValue', TRMDQuery_SetParamValue, 2, [0], varEmpty);
    AddGet(TRMDQuery, 'SetParamValueByName', TRMDQuery_SetParamValueByName, 2, [0], varEmpty);
  end;
end;

initialization
  RMRegisterPropEditor(TypeInfo(string), TRMDDataSet, 'MasterSource', TDataSourceEditor);

  RMRegisterPropEditor(TypeInfo(string), TRMDTable, 'MasterFields', TMasterFieldsEditor);

  RMRegisterPropEditor(TypeInfo(string), TRMDQuery, 'Datasource', TRMDQuery_DataSourceEditor);
  RMRegisterPropEditor(TypeInfo(string), TRMDQuery, 'SQL', TSQLBuilderEditor);
  RMRegisterPropEditor(TypeInfo(string), TRMDQuery, 'Parameters', TQueryParamsEditor);

  RM_RegisterRAI2Adapter(GlobalJvInterpreterAdapter);

end.

⌨️ 快捷键说明

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