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后在里面增加事务就可以
好的代码像粥一样,都是用时间熬出来的
分类:
Delphi
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2017-11-18 如何在主Form出现之前,弹出密码验证From,Cancel就退出程序,Ok后密码正确才出现主Form
2017-11-18 delphi 登陆窗口的问题 [问题点数:30分,结帖人tianhuo_soft]
2017-11-18 delphi中登录界面关闭直接现实主界面是怎么回事?
2017-11-18 delphi制作登陆窗体
2017-11-18 Delphi用户登录窗口框架
2017-11-18 Delphi7如何实现让Tedit显示文字垂直居中(上下居中)
2017-11-18 delphi Form属性设置 设置可实现窗体无最大化,并且不能拖大拖小