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

📄 dmbaseservice.pas

📁 Delphi三层原代码掩饰及补丁
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  Flag: Boolean;
begin
  if VarIsNull(Delta) then exit;
  with (FParent as TDataServer2) do
    begin
      cdsDelta.Close;
      cdsDelta.Data := Delta;
      Flag := cdsDelta.FindField('SYS_STATUS') <> nil;
    end; // with
  if Flag then
    InnerApplyUpdates2(TableName, KeyField)
  else
    InnerApplyUpdates(TableName, KeyField);
end;

function TBaseService.GetDataSet(Index: integer): IHMOleClientDataSet;
begin
  with (FParent as TDataServer2) do
    case Index of //
      0: Result := Pub1.IDataSet;
      1: Result := Pub2.IDataSet;
      2: Result := Pub3.IDataSet;
    else
      raise Exception.Create('(GetDataSet)Pub DataSet Out Bound');
    end; // case
end;

function TBaseService.GetParams: IHMOleVariant;
begin
  Result := (FParent as TDataServer2).OleParams;
end;

procedure TBaseService.InnerApplyUpdates(TableName, KeyField: WideString);
var
  i: integer;
  s1, s2: string;
  CmdStr: string;
  FieldList: TStringList;
begin
  with (FParent as TDataServer2) do
    begin
      FieldList := TStringList.Create;
      Connection.GetFieldNames(TableName, FieldList);
      if not cdsDelta.Active then cdsDelta.Open;
      for i := 1 to FieldList.Count do
        if cdsDelta.FindField(FieldList[i - 1]) <> nil then
          cdsDelta.FindField(FieldList[i - 1]).Tag := 1;
      FieldList.Free;
      if cdsDelta.RecordCount > 0 then
        begin
          cdsDelta.First;
          s1 := '';
          s2 := '';
          while not cdsDelta.Eof do
            begin
              CmdStr := '';
              case cdsDelta.UpdateStatus of
                usUnmodified:
                  begin
                    s2 := VarToSql(cdsDelta[KeyField]);
                  end;
                usModified:
                  begin
                    s1 := '';
                    for i := 1 to cdsDelta.FieldCount do
                      if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
                        begin
                          if s1 = '' then
                            s1 := Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value)
                          else
                            s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value);
                        end;
                    if s1 <> '' then
                      begin
                        CmdStr := 'Update ' + TableName + ' Set ' + s1 + ' Where ' + KeyField + ' = ' + s2;
                      end;
                  end;
                usInserted:
                  begin
                    s1 := '';
                    s2 := '';
                    for i := 1 to cdsDelta.FieldCount do
                      if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
                        begin
                          if s1 = '' then
                            begin
                              s1 := Trim(cdsDelta.Fields[i - 1].FieldName);
                              s2 := VarToSql(cdsDelta.Fields[i - 1].Value);
                            end
                          else
                            begin
                              s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName);
                              s2 := s2 + ',' + VarToSql(cdsDelta.Fields[i - 1].Value);
                            end;
                        end;
                    if s1 <> '' then
                      begin
                        CmdStr := 'Insert into ' + TableName + '(' + s1 + ') Values (' + s2 + ')';
                      end;
                  end;
                usDeleted:
                  begin
                    s2 := VarToSql(cdsDelta[KeyField]);
                    CmdStr := 'Delete ' + TableName + ' Where ' + KeyField + ' = ' + s2;
                  end;
              end;
              if CmdStr <> '' then Cmd.Execute(CmdStr);
              cdsDelta.Next;
            end;
          cdsDelta.First;
          cdsDelta.EmptyDataSet;
          cdsDelta.Close;
        end;
    end;
end;

procedure TBaseService.ApplyUpdatesWithDataSet(const DataSet: integer; TableName, KeyField: WideString);
var
  Flag: boolean;
begin
  with (FParent as TDataServer2) do
    begin
      cdsDelta.Close;
      case DataSet of //
        0: cdsDelta.Data := Pub1.Data;
        1: cdsDelta.Data := Pub2.Data;
        2: cdsDelta.Data := Pub3.Data;
      else
        raise Exception.Create('(ApplyUpdatesWithDataSet) Out of DataSet Index')
      end; // case
      Flag := cdsDelta.FindField('SYS_STATUS') <> nil;
    end; // with
  if Flag then
    InnerApplyUpdates2(TableName, KeyField)
  else
    InnerApplyUpdates(TableName, KeyField);
end;

procedure TBaseService.ApplyUpdatesRecordInfo(const DeltaName, TableName, KeyField: WideString);
var
  s1, s2: string;
  CmdStr: string;
  Flag: Boolean;
  UpdateStatus: TUpdateStatus;
begin
  with (FParent as TDataServer2) do
    begin
      if VarIsNull(OleParams[DeltaName]) then exit;
      cdsDelta.Close;
      cdsDelta.Data := OleParams[DeltaName];
      cdsDelta.Open;
      if cdsDelta.RecordCount > 0 then
        begin
          cdsDelta.First;
          s1 := '';
          s2 := '';
          Flag := cdsDelta.FindField('SYS_STATUS') <> nil;

          while not cdsDelta.Eof do
            begin
              CmdStr := '';
              if Flag then
                UpdateStatus := cdsDelta.UpdateStatus
              else
                UpdateStatus := TUpdateStatus(cdsDelta.IV['SYS_STATUS']);
              case UpdateStatus of
                usUnmodified:
                  begin
                    s2 := VarToSql(cdsDelta[KeyField]);
                  end;
                usModified:
                  begin
                    if Flag then s2 := VarToSql(cdsDelta[KeyField]);
                    s1 := 'ri_ModifyPsn = ' + VarToSql(OleParams['UserID']);
                    s1 := s1 + ', ri_ModifyDate = ' + ToSqlStr(DateToStr(Today));
                    CmdStr := 'Update dlgRecordInfo Set ' + s1 + ' Where ri_UniKey = ' + s2;
                  end;
                usInserted:
                  begin
                    s1 := 'ri_UniKey';
                    s1 := s1 + ', ri_TableName';
                    s1 := s1 + ', ri_CreatePsn ';
                    s1 := s1 + ', ri_CreateDate ';
                    s1 := s1 + ', ri_ModifyPsn ';
                    s1 := s1 + ', ri_ModifyDate ';
                    s2 := VarToSql(cdsDelta[KeyField]);
                    s2 := s2 + ',' + VarToSql(Uppercase(TableName));
                    s2 := s2 + ',' + VarToSql(OleParams['UserID']);
                    s2 := s2 + ',' + ToSqlStr(DateToStr(Today));
                    s2 := s2 + ',' + VarToSql(OleParams['UserID']);
                    s2 := s2 + ',' + ToSqlStr(DateToStr(Today));
                    CmdStr := 'Insert into dlgRecordInfo (' + s1 + ') Values (' + s2 + ')';
                  end;
                usDeleted:
                  begin
                    s1 := 'ri_DeletePsn = ' + VarToSql(OleParams['UserID']);
                    s1 := s1 + ', ri_DeleteDate = ' + ToSqlStr(DateToStr(Today));
                    s1 := s1 + ', ri_Deleted = 1';
                    s2 := VarToSql(cdsDelta[KeyField]);
                    CmdStr := 'Update dlgRecordInfo Set ' + s1 + ' Where ri_UniKey = ' + s2;
                  end;
              end;
              if CmdStr <> '' then Cmd.Execute(CmdStr);
              cdsDelta.Next;
            end;
          cdsDelta.First;
          cdsDelta.EmptyDataSet;
          cdsDelta.Close;
        end;
    end;
end;

procedure TBaseService.InnerApplyUpdates2(TableName, KeyField: WideString);
var
  i: integer;
  s1, s2: string;
  CmdStr: string;
  FieldList: TStringList;
  UpdateStatus: integer;
begin
  with (FParent as TDataServer2) do
    begin
      FieldList := TStringList.Create;
      Connection.GetFieldNames(TableName, FieldList);
      if not cdsDelta.Active then cdsDelta.Open;
      for i := 1 to FieldList.Count do
        if cdsDelta.FindField(FieldList[i - 1]) <> nil then
          cdsDelta.FindField(FieldList[i - 1]).Tag := 1;
      FieldList.Free;
      if cdsDelta.RecordCount > 0 then
        begin
          cdsDelta.First;
          s1 := '';
          s2 := '';
          while not cdsDelta.Eof do
            begin
              CmdStr := '';
              UpdateStatus := cdsDelta.IV['SYS_STATUS'];
              case TUpdateStatus(UpdateStatus) of
                usUnmodified, usModified:
                  begin
                    s1 := '';
                    s2 := VarToSql(cdsDelta[KeyField]);
                    for i := 1 to cdsDelta.FieldCount do
                      if cdsDelta.Fields[i - 1].CanModify and (cdsDelta.Fields[i - 1].Tag = 1) and (UpperCase(cdsDelta.Fields[i - 1].FieldName) <> Uppercase(KeyField)) then
                        begin
                          if s1 = '' then
                            s1 := Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value)
                          else
                            s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].Value);
                        end;
                    if s1 <> '' then
                      begin
                        CmdStr := 'Update ' + TableName + ' Set ' + s1 + ' Where ' + KeyField + ' = ' + s2;
                      end;
                  end;
                usInserted:
                  begin
                    s1 := '';
                    s2 := '';
                    for i := 1 to cdsDelta.FieldCount do
                      if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
                        begin
                          if s1 = '' then
                            begin
                              s1 := Trim(cdsDelta.Fields[i - 1].FieldName);
                              s2 := VarToSql(cdsDelta.Fields[i - 1].Value);
                            end
                          else
                            begin
                              s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName);
                              s2 := s2 + ',' + VarToSql(cdsDelta.Fields[i - 1].Value);
                            end;
                        end;
                    if s1 <> '' then
                      begin
                        CmdStr := 'Insert into ' + TableName + '(' + s1 + ') Values (' + s2 + ')';
                      end;
                  end;
                usDeleted:
                  begin
                    s2 := VarToSql(cdsDelta[KeyField]);
                    CmdStr := 'Delete ' + TableName + ' Where ' + KeyField + ' = ' + s2;
                  end;
              end;
              if CmdStr <> '' then Cmd.Execute(CmdStr);
              cdsDelta.Next;
            end;
          cdsDelta.First;
          cdsDelta.EmptyDataSet;
          cdsDelta.Close;
        end;
    end;
end;

{ TBaseOle }

constructor TBaseOle.Create(AOwner: TComponent);
begin
  inherited Create;
  FParent := AOwner;
end;

procedure TBaseOle.AddDspAsName(Name: WideString);
begin
  (FParent as TDataServer2).Ole[Name] := (FParent as TDataServer2).dspTest.Data;
end;

procedure TBaseOle.Clear;
begin
  (FParent as TDataServer2).Ole.Clear;
end;

function TBaseOle.GetValue(Name: WideString): OleVariant;
begin
  Result := (FParent as TDataServer2).Ole[Name];
end;

procedure TBaseOle.SetValue(Name: WideString; Value: OleVariant);
begin
  (FParent as TDataServer2).Ole[Name] := Value;
end;

end.

⌨️ 快捷键说明

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