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后在里面增加事务就可以
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Delphi是一种用于编写Windows平台应用程序的开发工具,而SQL Server是一种关系型数据库管理系统。在Delphi中实现多线程读写SQL Server数据库有以下几个步骤: 1. 引入相关单元:首先,在Delphi中需要引入一些相关的单元,如ADODB、ComObj等,以便使用数据库访问组件和相关的COM对象。 2. 连接数据库:在多线程处理之前,需要先建立与SQL Server数据库的连接。可以使用ADODB组件中的TADOConnection来连接数据库,并设置相关的连接字符串。 3. 创建多个线程:在Delphi中创建多线程可以使用TThread,可以派生出自定义的线程,并在Execute方法中实现具体的数据库操作。每个线程负责自己的数据库读写操作。 4. 执行SQL语句:在每个线程的Execute方法中,可以使用TADOQuery或TADOCommand等组件来执行SQL语句。可以使用Prepare方法预编译SQL语句,然后使用Parameters设置参数值,最后通过Execute或Open方法执行SQL语句。 5. 处理数据:在读取数据库数据时,可以使用TADOQuery组件的Recordset属性来获取返回的记录集,然后使用相关的方法或属性获取数据,并进行相应的处理。 6. 线程同步:在多线程操作数据库时,需要注意线程同步问题。可以使用TMonitor或TCriticalSection来实现线程间的互斥访问,以避免操作冲突和数据不一致。 7. 关闭连接:在所有线程的操作都完成后,需要关闭与数据库的连接,释放相关资源和线程。 总之,通过在Delphi多线程中使用ADODB组件和相关组件,可以实现对SQL Server数据库的读写操作。但需要注意线程同步和资源管理,以避免出现问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值