zoukankan      html  css  js  c++  java
  • DELPHI 数据库操作类(工具类)

    DELPHI 数据库连接类

    做的时候目地是可以通过类的创建和释放进行数据库的短连接,在做服务端的时候每一个请求都通过类生成一个数据连接

    unit UnDm;
    
    interface
    
    uses
      SysUtils, Classes, Controls, Forms, Dialogs,
      ComCtrls, ExtCtrls, Menus, StdCtrls,
      ADODB,
      DB,inifiles;
    
    type
      TRecordResult = (RRError, RRZero, RROK);
      TDataStatus = (DsSel, DsEdit, DsAdd);
    type
      TDataConnection = class
        DataAdoConn: TADOConnection;
        qryTemp1: TADOQuery;
        qryTemp2: TADOQuery;
        qryTemp3: TADOQuery;
        qryTemp4: TADOQuery;
    
      private
    
      public
        constructor Create; overload;
        //连接数据库
        function DbConn: Boolean;
    
        //启动事物
        function AdoBeginTrans: Boolean;
        //回滚事物
        function AdoRollbackTrans: Boolean;
        //提交事物
        function AdoCommitTrans: Boolean;
        //
        Function GetOpenQuery(const sSql, sTitle: String; _AdoQry: TADOQuery; Is_View: Boolean = True): TRecordResult; overload;
        function UpdateSql(const sSql, sTitle: String; IsView: Boolean= True): TRecordResult;
        function GetAllUser: Integer;
      end;
    
    
    implementation
    uses Querypa;
    
    constructor TDataConnection.Create;
    var
      I:Integer;
    begin
      inherited;
      DataAdoConn:=TADOConnection.Create(nil);
      qryTemp1:=TADOQuery.Create(nil);
      qryTemp2:=TADOQuery.Create(nil);
      qryTemp3:=TADOQuery.Create(nil);
      qryTemp4:=TADOQuery.Create(nil);
      DataAdoConn.LoginPrompt:=False;
      qryTemp1.Connection:=DataAdoConn;
      qryTemp2.Connection:=DataAdoConn;
      qryTemp3.Connection:=DataAdoConn;
      qryTemp4.Connection:=DataAdoConn;
    end;
    
    function TDataConnection.DbConn: Boolean;
    const
      //sDbConn = 'Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=%s';
      sDbConn = 'Provider=OraOLEDB.Oracle.1;Password=%s;User ID=%s;Data Source=%s;Persist Security Info=True';
    var
      sUdlFile: String;
      ServerIni:TiniFile;
      SOURCE,USER,PASSWORD:string;
      sSql:string;
    begin
      //获得数据库连接串
      ServerIni := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'ServerInfor.Ini');
      SOURCE := ServerIni.ReadString('HIS', 'SOURCE', '0');
      USER := ServerIni.ReadString('HIS', 'USER', '0');
      PASSWORD := ServerIni.ReadString('HIS', 'PASSWORD', '0');
      sSql := Format(sDbConn, [PASSWORD, USER, SOURCE]);
      Result := False;
      if DataAdoConn.Connected then
        DataAdoConn.Close;
      //连接数据库
      DataAdoConn.ConnectionString :=sSql;  //'FILE NAME='+sUdlFile;
      Try
        DataAdoConn.Open;
        if not DataAdoConn.Connected then
        begin
          Result :=false;
          Exit;
        end
        else
        begin
          Result :=true;
        end;
      Except
        Result := False;
        Exit;
      end;
    end;
    
    function TDataConnection.AdoBeginTrans: Boolean;
    Var
      nResult: Integer;
    begin
      Result := False;
      Try
        nResult := DataAdoConn.BeginTrans;
        if nResult > 0 then
          Result := True;
      except
        On E: Exception do
        Begin
          SaveError('启动事务', E.Message);
        end;
      end;
    end;
    function TDataConnection.AdoCommitTrans: Boolean;
    Var
      nResult: Integer;
    begin
      Result := False;
      Try
        DataAdoConn.CommitTrans;
        Result := True;
      except
        On E: Exception do
        Begin
          SaveError('提交事务', E.Message);
        end;
      end;
    
    end;
    
    function TDataConnection.AdoRollbackTrans: Boolean;
    Var
      nResult: Integer;
    begin
      Result := False;
    
      Try
        DataAdoConn.RollbackTrans;
        Result:True;
      except
        On E: Exception do
        Begin
          SaveError('回滚事务', E.Message);
        end;
      end;
    end;
    
    /// <summary>
    /// 更新数据库涵数 插入或修改
    /// sSql SQL语句
    /// sTitle执行标题
    /// IsView出错后是否弹出消息 
    /// </summary>
    function TDataConnection.UpdateSql(const sSql, sTitle: String;
      IsView: Boolean): TRecordResult;
    Var
      nResult: Integer;
      AdoQry:TADOQuery;
    begin
      AdoQry:=TADOQuery.Create(nil);
      AdoQry.Connection:= DataAdoConn;
      Result := RRError;
      With AdoQry do
      Begin
        Close;
        SQL.Text := sSql;
        Try
          nResult := ExecSQL;
          if nResult = 0 then
            Result := RRZero
          else
            Result := RROK;
        Except
          on E: Exception do
          Begin
            SaveError(sTitle, sSql+ #10#13 +E.Message);
            MsgShow(E.Message, 3);
            Exit;
          end;
        end;
      end;
      if Result = RRZero then
      Begin
        SaveError(sTitle, sSql+ #10#13 +'执行没有返回正确结果!');
        if IsView then
          MsgShow('执行没有返回正确结果!', 0);
        Exit;
      end;
    end;
    
    /// <summary>
    /// 查询数据库语句
    /// sSql SQL语句
    /// sTitle执行标题
    ///  _AdoQry  Adoquery控件
    /// IsView出错后是否弹出消息 
    /// </summary>
    function TDataConnection.GetOpenQuery(const sSql, sTitle: String; _AdoQry: TADOQuery;
      Is_View: Boolean): TRecordResult;
    begin
      Result := RRError;
      With _AdoQry do
      Begin
        Close;
        SQL.Text := sSql;
        Try
          Open;
          if IsEmpty then
            Result := RRZero;
          if Not IsEmpty then
            Result := RROK;
        Except
          on E: Exception do
          Begin
            SaveError(sTitle, sSql+ #10#13 +E.Message);
            MsgShow(E.Message, 3);
            Exit;
          end;
        end;
      end;
      if (Result = RRZero) and Is_View then
      Begin
        SaveError(sTitle, sSql+ #10#13 + sTitle);
        MsgShow(sTitle, 3);
      end;
    end;
    
    
    function TDataConnection.GetAllUser: Integer;
    begin
      with qryTemp1 do
      begin
        Close;
        SQL.Text := 'SELECT USERID, name From T_USERS';
        Open;
      end;
      Result := qryTemp1.RecordCount;
    end;
    
    
    
    
    end.
    ————————————————

    声明

    var
        dm: TDataConnection;

    创建

    //首选连接服务器数据库
      dm:=TDataConnection.Create;
      if not dm.DbConn then
      begin
        MsgShow('服务器数据库连接失败,无法启动服务',1);
        dm.Free;
        Exit;
      end;

    执行SQL语句

      strSQL:=' UPDATE A SET AA=''1''';
      DM.UpdateSql(strSQL,'更新数据库',false);

    查询数据库

      strSQL:=' SELECT * FROM A';
      DM.GetOpenQuery(strSQL,'更新数据库',ADOQUERY1,false);

    事务就添加TRY后在里面增加事务就可以

  • 相关阅读:
    sed 命令编辑文本
    Iocomp控件教程之Pie Chart——饼状图控件
    《Go并发编程实战》第2版 紧跟Go的1.8版本号
    浅谈PHP数据结构之栈
    oracle11g导入dmp文件(根据用户)
    exp命令ORACLCE10G导出ORACLE11G的数据1455错误
    将war文件解压到指定目录
    JAVA包命名规范
    Eclipse中新建jsp文件访问页面时乱码问题
    网页编码就是那点事
  • 原文地址:https://www.cnblogs.com/jijm123/p/11879398.html
Copyright © 2011-2022 走看看