DELPHI 数据库连接类

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

  1. unit UnDm;
  2.  
  3. interface
  4.  
  5. uses
  6. SysUtils, Classes, Controls, Forms, Dialogs,
  7. ComCtrls, ExtCtrls, Menus, StdCtrls,
  8. ADODB,
  9. DB,inifiles;
  10.  
  11. type
  12. TRecordResult = (RRError, RRZero, RROK);
  13. TDataStatus = (DsSel, DsEdit, DsAdd);
  14. type
  15. TDataConnection = class
  16. DataAdoConn: TADOConnection;
  17. qryTemp1: TADOQuery;
  18. qryTemp2: TADOQuery;
  19. qryTemp3: TADOQuery;
  20. qryTemp4: TADOQuery;
  21.  
  22. private
  23.  
  24. public
  25. constructor Create; overload;
  26. //连接数据库
  27. function DbConn: Boolean;
  28.  
  29. //启动事物
  30. function AdoBeginTrans: Boolean;
  31. //回滚事物
  32. function AdoRollbackTrans: Boolean;
  33. //提交事物
  34. function AdoCommitTrans: Boolean;
  35. //
  36. Function GetOpenQuery(const sSql, sTitle: String; _AdoQry: TADOQuery; Is_View: Boolean = True): TRecordResult; overload;
  37. function UpdateSql(const sSql, sTitle: String; IsView: Boolean= True): TRecordResult;
  38. function GetAllUser: Integer;
  39. end;
  40.  
  41. implementation
  42. uses Querypa;
  43.  
  44. constructor TDataConnection.Create;
  45. var
  46. I:Integer;
  47. begin
  48. inherited;
  49. DataAdoConn:=TADOConnection.Create(nil);
  50. qryTemp1:=TADOQuery.Create(nil);
  51. qryTemp2:=TADOQuery.Create(nil);
  52. qryTemp3:=TADOQuery.Create(nil);
  53. qryTemp4:=TADOQuery.Create(nil);
  54. DataAdoConn.LoginPrompt:=False;
  55. qryTemp1.Connection:=DataAdoConn;
  56. qryTemp2.Connection:=DataAdoConn;
  57. qryTemp3.Connection:=DataAdoConn;
  58. qryTemp4.Connection:=DataAdoConn;
  59. end;
  60.  
  61. function TDataConnection.DbConn: Boolean;
  62. const
  63. //sDbConn = 'Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=%s';
  64. sDbConn = 'Provider=OraOLEDB.Oracle.1;Password=%s;User ID=%s;Data Source=%s;Persist Security Info=True';
  65. var
  66. sUdlFile: String;
  67. ServerIni:TiniFile;
  68. SOURCE,USER,PASSWORD:string;
  69. sSql:string;
  70. begin
  71. //获得数据库连接串
  72. ServerIni := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'ServerInfor.Ini');
  73. SOURCE := ServerIni.ReadString('HIS', 'SOURCE', '');
  74. USER := ServerIni.ReadString('HIS', 'USER', '');
  75. PASSWORD := ServerIni.ReadString('HIS', 'PASSWORD', '');
  76. sSql := Format(sDbConn, [PASSWORD, USER, SOURCE]);
  77. Result := False;
  78. if DataAdoConn.Connected then
  79. DataAdoConn.Close;
  80. //连接数据库
  81. DataAdoConn.ConnectionString :=sSql; //'FILE NAME='+sUdlFile;
  82. Try
  83. DataAdoConn.Open;
  84. if not DataAdoConn.Connected then
  85. begin
  86. Result :=false;
  87. Exit;
  88. end
  89. else
  90. begin
  91. Result :=true;
  92. end;
  93. Except
  94. Result := False;
  95. Exit;
  96. end;
  97. end;
  98.  
  99. function TDataConnection.AdoBeginTrans: Boolean;
  100. Var
  101. nResult: Integer;
  102. begin
  103. Result := False;
  104. Try
  105. nResult := DataAdoConn.BeginTrans;
  106. if nResult > then
  107. Result := True;
  108. except
  109. On E: Exception do
  110. Begin
  111. SaveError('启动事务', E.Message);
  112. end;
  113. end;
  114. end;
  115. function TDataConnection.AdoCommitTrans: Boolean;
  116. Var
  117. nResult: Integer;
  118. begin
  119. Result := False;
  120. Try
  121. DataAdoConn.CommitTrans;
  122. Result := True;
  123. except
  124. On E: Exception do
  125. Begin
  126. SaveError('提交事务', E.Message);
  127. end;
  128. end;
  129.  
  130. end;
  131.  
  132. function TDataConnection.AdoRollbackTrans: Boolean;
  133. Var
  134. nResult: Integer;
  135. begin
  136. Result := False;
  137.  
  138. Try
  139. DataAdoConn.RollbackTrans;
  140. Result:True;
  141. except
  142. On E: Exception do
  143. Begin
  144. SaveError('回滚事务', E.Message);
  145. end;
  146. end;
  147. end;
  148.  
  149. /// <summary>
  150. /// 更新数据库涵数 插入或修改
  151. /// sSql SQL语句
  152. /// sTitle执行标题
  153. /// IsView出错后是否弹出消息
  154. /// </summary>
  155. function TDataConnection.UpdateSql(const sSql, sTitle: String;
  156. IsView: Boolean): TRecordResult;
  157. Var
  158. nResult: Integer;
  159. AdoQry:TADOQuery;
  160. begin
  161. AdoQry:=TADOQuery.Create(nil);
  162. AdoQry.Connection:= DataAdoConn;
  163. Result := RRError;
  164. With AdoQry do
  165. Begin
  166. Close;
  167. SQL.Text := sSql;
  168. Try
  169. nResult := ExecSQL;
  170. if nResult = then
  171. Result := RRZero
  172. else
  173. Result := RROK;
  174. Except
  175. on E: Exception do
  176. Begin
  177. SaveError(sTitle, sSql+ ## +E.Message);
  178. MsgShow(E.Message, );
  179. Exit;
  180. end;
  181. end;
  182. end;
  183. if Result = RRZero then
  184. Begin
  185. SaveError(sTitle, sSql+ ## +'执行没有返回正确结果!');
  186. if IsView then
  187. MsgShow('执行没有返回正确结果!', );
  188. Exit;
  189. end;
  190. end;
  191.  
  192. /// <summary>
  193. /// 查询数据库语句
  194. /// sSql SQL语句
  195. /// sTitle执行标题
  196. /// _AdoQry Adoquery控件
  197. /// IsView出错后是否弹出消息
  198. /// </summary>
  199. function TDataConnection.GetOpenQuery(const sSql, sTitle: String; _AdoQry: TADOQuery;
  200. Is_View: Boolean): TRecordResult;
  201. begin
  202. Result := RRError;
  203. With _AdoQry do
  204. Begin
  205. Close;
  206. SQL.Text := sSql;
  207. Try
  208. Open;
  209. if IsEmpty then
  210. Result := RRZero;
  211. if Not IsEmpty then
  212. Result := RROK;
  213. Except
  214. on E: Exception do
  215. Begin
  216. SaveError(sTitle, sSql+ ## +E.Message);
  217. MsgShow(E.Message, );
  218. Exit;
  219. end;
  220. end;
  221. end;
  222. if (Result = RRZero) and Is_View then
  223. Begin
  224. SaveError(sTitle, sSql+ ## + sTitle);
  225. MsgShow(sTitle, );
  226. end;
  227. end;
  228.  
  229. function TDataConnection.GetAllUser: Integer;
  230. begin
  231. with qryTemp1 do
  232. begin
  233. Close;
  234. SQL.Text := 'SELECT USERID, name From T_USERS';
  235. Open;
  236. end;
  237. Result := qryTemp1.RecordCount;
  238. end;
  239.  
  240. end.
  241. ————————————————

声明

  1. var
  2. dm: TDataConnection;

创建

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

执行SQL语句

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

查询数据库

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

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

DELPHI 数据库操作类(工具类)的更多相关文章

  1. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  2. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  3. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  4. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  5. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  6. java中文件操作的工具类

    代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...

  7. Java操作Redis工具类

    依赖 jar 包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...

  8. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  9. 自制php操作mysql工具类(DB.class.php)

    DB.class.php <?php class DB{ //主机地址 var $host; //用户名 var $username; //密码 var $password; //数据库名 va ...

  10. java操作excel 工具类

    java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...

随机推荐

  1. Java设计模式的6大原则

    Java设计模式的6大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.简单来 ...

  2. Kubernetes 学习15 kubernetes 认证及serviceaccount

    一.概述 1.通过此前描述可以知道k8s是以后运行我们生产环境中重要应用程序的尤其是无状态程序的一个非常重要的平台.这里面能托管一些核心应用以及核心数据,很显然对于k8s对应接口的访问不是任何人都可以 ...

  3. nowcoder73E 白兔的刁难 单位根反演+NTT

    感觉很套路? #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in" ...

  4. Dominating Patterns (AC 自动鸡模版题, 出现次数最多的子串)

    传送门 题意: 给你n个模式串, 再给你一个 文本串,问模式串在文本串中出现次数最多是多少. 出现次数最多的模式串有哪些. 解: 模版题. #include <bits/stdc++.h> ...

  5. 2017.10.3 国庆清北 D3T3 解迷游戏

    题目描述 LYK进了一家古董店,它很想买其中的一幅画.但它带的钱不够买这幅画. 幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它. 老板有一个n*m的矩阵,他想 ...

  6. spark,hadoop集群安装注意

    安装步骤严格参看厦门大学数据实验室教程 Spark 2.0分布式集群环境搭建(Python版) 安装Hadoop并搭建好Hadoop集群环境 遇到的问题 1.ubuntu 安装后升级.python是3 ...

  7. AtCoder Grand Contest 020 题解

    传送门 怎么又是\(tourist\)神仙的题-- \(A\) 咕咕 int n,a,b; int main(){ scanf("%d%d%d",&n,&a,&am ...

  8. Pytest权威教程21-API参考-07-配置选项(Configuration Options)

    目录 配置选项(Configuration Options) addopts cache_dir confcutdir console_output_style doctest_encoding do ...

  9. 「雅礼集训 2017 Day10」拍苍蝇

    传送门 Description 有一天,小 A 的母亲对他家里的卫生状况非常不满意,他的房间里有非常多的苍蝇.在母亲的威逼利诱下,小 A 拿起了苍蝇拍去消灭家里的苍蝇.然而,小 A 以前从来没有亲手消 ...

  10. js off 缓动动画

    动画也有很多种,一起来学习,缓动动画吧 缓动动画 1.缓动动画原理=盒子位置+(目标盒子位置-现在盒子位置)/10 2.步长越来越小 3.让步长越来越小的公式      步长=(目标位置-本身位置)/ ...