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

📄 rdmunit.pas

📁 三层的通用架构
💻 PAS
📖 第 1 页 / 共 3 页
字号:

function TDefaultRDM.AddSQL(ClearFlag: WordBool; const SQLString: WideString;
  ExecFlag: WordBool): WordBool;
var
  ViewString, ErrorString: string;
  Flag: Boolean;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  Result := False;
  Flag := False;
  ErrorString := '尚未登录';
  if FLogin and not FSelf then
  begin
    with DefaultRDMADOQuery do
      try
        Active := False;
        if ClearFlag then
          SQL.Clear;
        SQL.Add(SQLString);
        if ExecFlag then
        begin
          DefaultRDMADOQuery.ExecSQL;
          Flag := True;
          ViewString := ViewString + '成功执行以下SQL语句:'#13#10'{'#13#10 + SQL.Text + '}';
        end;
        Result := True;
        ErrorString := '';
      except
        on E: exception do
        begin
          ErrorString := E.Message;
          Flag := True;
          ViewString := ViewString + '执行以下SQL语句时失败:'#13#10'{'#13#10 + SQL.Text + '}'#13#10'出错信息为: ' + ErrorString;
        end;
      end;
    if Flag then
    begin
      Lock;
      TheMainForm.DoAddViewString(ViewString);
      Unlock;
    end;
  end;
  if FLogin and FSelf then
    ErrorString := '不允许执行!';
  FErrorStrings.Add(ErrorString);
end;

procedure TDefaultRDM.DefaultRDMADOConnectionBeforeConnect(
  Sender: TObject);
begin
  if FLogin and not FSelf then
  begin
    Lock;
    with TADOConnection(Sender) do
      ConnectionString := TheMainForm.GetADOConnectionString(FUserRealName);
    Unlock;
  end;
end;

procedure TDefaultRDM.DefaultRDMADOConnectionAfterConnect(Sender: TObject);
begin
  if not Flogin or FSelf then
    TADOConnection(Sender).Connected := False;
end;

procedure TDefaultRDM.DefaultRDMADOConnectionBeforeDisconnect(
  Sender: TObject);
begin
  if FLogin and not FSelf then
    while TADOConnection(Sender).InTransaction do
      try
        TADOConnection(Sender).CommitTrans;
      except
        try
          TADOConnection(Sender).RollbackTrans;
        except
        end;
      end;
end;

function TDefaultRDM.ChangePassword(const OldPassword,
  NewPassword: WideString; EncryptFlag: WordBool): WordBool;
var
  ViewString, ErrorString, UserName, UserRealName, UserAliasName: string;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  ErrorString := '尚未登录';
  if FLogin then
    ErrorString := '原密码不正确';
  Lock;
  Result := WordBool(FLogin and TheMainForm.CheckUser(FUserName, string(OldPassword), UserName, UserRealName, UserAliasName, Boolean(EncryptFlag)));
  if Result then
    ErrorString := '无法更改密码';
  Result := Result and WordBool(TheMainForm.ChangeCurrentPassword(FUserName, FUserRealName, string(NewPassword), Boolean(EncryptFlag)));
  if FLogin then
  begin
    if Result then
      ViewString := ViewString + '成功更改密码'
    else
      ViewString := ViewString + '更改密码失败';
    if not FSelf then
      TheMainForm.DoAddViewString(ViewString);
  end;
  Unlock;
  if Result then
    ErrorString := '';
  FErrorStrings.Add(ErrorString);
end;

function TDefaultRDM.GetErrorString(Index: Integer): WideString;
var
  i: Integer;
begin
  Result := '';
  if FErrorStrings.Count > 0 then
  begin
    i := Index;
    if (i <= 0) or (i > FErrorStrings.Count) then
      i := FErrorStrings.Count;
    Result := WideString(FErrorStrings[i - 1]);
  end;
end;

procedure TDefaultRDM.DefaultRDMProviderGetData(Sender: TObject;
  DataSet: TCustomClientDataSet);
var
  ViewString: string;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  if FLogin and not FSelf then
  begin
    ViewString := ViewString + '查询数据:'#13#10'{'#13#10 + DefaultRDMADOQuery.SQL.Text + '}';
    Lock;
    TheMainForm.DoAddViewString(ViewString);
    Unlock;
  end
  else
    with DataSet do
    begin
     ClearFields;
     Post;
    end;
end;

procedure TDefaultRDM.DefaultRDMProviderUpdateData(Sender: TObject;
  DataSet: TCustomClientDataSet);
var
  ViewString: string;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  if FLogin and not FSelf then
  begin
    ViewString := ViewString + '更新数据:'#13#10'{'#13#10 + DefaultRDMADOQuery.SQL.Text + '}';
    Lock;
    while FFieldIndexs.Count > 0 do
      try
        DataSet.Fields[StrToInt(FFieldIndexs[0])].ProviderFlags := [];
        TDataSetProvider(Sender).DataSet.Fields[StrToInt(FFieldIndexs[0])].ProviderFlags := [];
      finally
        FFieldIndexs.Delete(0);
      end;
    TheMainForm.DoAddViewString(ViewString);
    Unlock;
  end;
end;

procedure TDefaultRDM.DefaultRDMProviderGetTableName(Sender: TObject;
  DataSet: TDataSet; var TableName: String);
begin
  if FTableName <> '' then
    TableName := FTableName;
end;

procedure TDefaultRDM.DefaultRDMProviderUpdateError(Sender: TObject;
  DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
  var Response: TResolverResponse);
var
  ViewString: string;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  if FLogin and not FSelf then
  begin
    ViewString := ViewString + '更新数据时出错:'#13#10'{'#13#10 + DefaultRDMADOQuery.SQL.Text + '}'#13#10'出错信息为: ' + E.Message;
    Lock;
    TheMainForm.DoAddViewString(ViewString);
    Unlock;
  end;
end;

procedure TDefaultRDM.DefaultRDMProviderBeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  Applied := not FLogin;
end;

procedure TDefaultRDM.SetUpdateTableName(const TableName, FieldIndexs: WideString);
var
  ErrorString: string;
begin
  ErrorString := '尚未登录';
  if FLogin and not FSelf then
  begin
    FTableName := string(TableName);
    FFieldIndexs.Text := string(FieldIndexs);
    ErrorString := '';
  end;
  if FLogin and FSelf then
    ErrorString := '不允许执行!';
  FErrorStrings.Add(ErrorString);
end;

function TDefaultRDM.GetUserInfo(AllUsersFlag: WordBool): WideString;
var
  ViewString, ErrorString: string;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  ErrorString := '尚未登录';
  Result := '';
  if FLogin then
  begin
    Result := TheMainForm.GetUserInfo(AllUsersFlag, FUserName, FUserRealName);
    ErrorString := '';
    if not FSelf then
    begin
      ViewString := ViewString + '读取用户信息';
      Lock;
      TheMainForm.DoAddViewString(ViewString);
      Unlock;
    end;
  end;
  FErrorStrings.Add(ErrorString);
end;

function TDefaultRDM.ProcessPassword(const BasicStr, Value: WideString;
  ToNatural: WordBool): WideString;
var
  ErrorString: string;
begin
  Result := TheMainForm.ProcessPassword(string(BasicStr), string(Value), ToNatural);
  ErrorString := '';
  FErrorStrings.Add(ErrorString);
end;

function TDefaultRDM.GetProcedureNames: WideString;
var
  ViewString, ErrorString: string;
  List: TStringList;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  Result := '';
  ErrorString := '尚未登录';
  if FLogin and not FSelf then
  begin
    ErrorString := '未连接数据库';
    if DefaultRDMADOConnection.Connected then
    begin
      ErrorString := '读取存储过程列表时出错';
      List := TStringList.Create;
      try
        DefaultRDMADOConnection.GetProcedureNames(List);
        Result := List.Text;
        ViewString := ViewString + '成功读取存储过程列表';
        ErrorString := '';
      except
        on E: Exception do
        begin
          ErrorString := E.Message;
          ViewString := ViewString + '读取存储过程列表时出错:'#13#10 + ErrorString;
        end;
      end;
      List.Free;
      Lock;
      TheMainForm.DoAddViewString(ViewString);
      Unlock;
    end;
  end;
  if FLogin and FSelf then
    ErrorString := '不允许执行!';
  FErrorStrings.Add(ErrorString);
end;

function TDefaultRDM.GetTableNames(SystemTables: WordBool): WideString;
var
  ViewString, ErrorString: string;
  List: TStringList;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  Result := '';
  ErrorString := '尚未登录';
  if FLogin and not FSelf then
  begin
    ErrorString := '未连接数据库';
    if DefaultRDMADOConnection.Connected then
    begin
      if SystemTables then
        ErrorString := '读取表名列表(含系统表)时出错'
      else
        ErrorString := '读取表名列表(不含系统表)时出错';
      List := TStringList.Create;
      try
        DefaultRDMADOConnection.GetTableNames(List, SystemTables);
        Result := List.Text;
        if SystemTables then
          ViewString := ViewString + '成功读取表名列表(含系统表)'
        else
          ViewString := ViewString + '成功读取表名列表(不含系统表)';
        ErrorString := '';
      except
        on E: Exception do
        begin
          ErrorString := E.Message;
          if SystemTables then
            ViewString := ViewString + '读取表名列表(含系统表)时出错:'#13#10 + ErrorString
          else
            ViewString := ViewString + '读取表名列表(不含系统表)时出错:'#13#10 + ErrorString;
        end;
      end;
      List.Free;
      Lock;
      TheMainForm.DoAddViewString(ViewString);
      Unlock;
    end;
  end;
  if FLogin and FSelf then
    ErrorString := '不允许执行!';
  FErrorStrings.Add(ErrorString);
end;

function TDefaultRDM.GetFieldNames(
  const TableName: WideString): WideString;
var
  ViewString, ErrorString: string;
  List: TStringList;
begin
  ViewString := '[' + GetCurrentDateTime + '] 用户 ' + FName + ' ';
  Result := '';
  ErrorString := '尚未登录';
  if FLogin and not FSelf then
  begin
    ErrorString := '未连接数据库';
    if DefaultRDMADOConnection.Connected then
    begin
      ErrorString := '读取表' + TableName + '字段列表时出错';

⌨️ 快捷键说明

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