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', '');
USER := ServerIni.ReadString('HIS', 'USER', '');
PASSWORD := ServerIni.ReadString('HIS', 'PASSWORD', '');
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 > 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 = then
Result := RRZero
else
Result := RROK;
Except
on E: Exception do
Begin
SaveError(sTitle, sSql+ ## +E.Message);
MsgShow(E.Message, );
Exit;
end;
end;
end;
if Result = RRZero then
Begin
SaveError(sTitle, sSql+ ## +'执行没有返回正确结果!');
if IsView then
MsgShow('执行没有返回正确结果!', );
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+ ## +E.Message);
MsgShow(E.Message, );
Exit;
end;
end;
end;
if (Result = RRZero) and Is_View then
Begin
SaveError(sTitle, sSql+ ## + sTitle);
MsgShow(sTitle, );
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('服务器数据库连接失败,无法启动服务',);
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 数据库操作类(工具类)的更多相关文章

  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. Python函数的基本使用

    在编程中,无论使用什么 编程语言,函数的使用都是非常广泛的,函数能够完成特定的功能,降低编程的难度和代码重用. 1.函数的定义: 函数是一段具有特定功能的.可重用的语句组,用函数名来表示并通过函数名进 ...

  2. mui真机调试时无法查找到手机

    在做mui的真机调试时手机查找不到手机,有可能是你的  adb interface 驱动  版本过低,先下载 或自行百度 http://www.onlinedown.net/soft/1164054. ...

  3. Default Trace 查找日志文件快速增长的原因

    select loginname, loginsid, spid, hostname, applicationname, servername, databasename, objectname, e ...

  4. 备份docker运行的gitlab

    #!/bin/bash data=$(date "+%Y-%m-%d %H:%M:%S") gitBak='/data/gitlab/data/backups' delFile=` ...

  5. Kubernetes 学习18配置网络插件flannel

    一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...

  6. 018_Python3 模块

    在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文 ...

  7. (尚010)Vue列表的搜素和排序

    1.test010.html <!DOCTYPE html><html lang="en"><head> <meta charset=&q ...

  8. vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别

    先说一下对比吧 Jquery ajax, Axios, Fetch区别之我见 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQuery 1 ...

  9. [内网渗透]MS14-068复现(CVE-2014-6324)

    0x01 简介 在做域渗透测试时,当我们拿到了一个普通域成员的账号后,想继续对该域进行渗透,拿到域控服务器权限.如果域控服务器存在MS14_068漏洞,并且未打补丁,那么我们就可以利用MS14_068 ...

  10. Chrome 浏览器中查看 webSocket 连接信息

      1.以下代码实现一个webSocket连接,在文本输入框中输入内容,点击发送,通过服务器,返回相同的内容显示在下方. 1 <!DOCTYPE html> 2 <html lang ...