MyMsgBox.pas是自定义的messagebox,所以才可使用MsgBox,自定义消息框下载地址
http://download.csdn.net/detail/wozengcong/6263775
unit UnitUniDAC;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, MyMsgBox, cxGraphics, cxControls, Uni,
UniProvider, OracleUniProvider;
var
UniConnection: TUniConnection;
function SetUniConnection(sServer, sUserName, sPassWord: string): Boolean;
function GetUniConnection: TUniConnection;
function PrepareSql(UniQuery: TUniQuery; bQuery: Boolean; sMySql: string): Boolean;
implementation
{-------------------------------------------------------------------------------
作者: 曾聪
日期: 2013.09.20
过程名: SetUniConnection
功能: 封装SQL连接数据库代码,主要含传入的连接数据库的参数
参数: sServer, sUserName, sPassWord: string
返回值: Boolean
说明: 使用try......finally作为预留扩展内容
-------------------------------------------------------------------------------}
function SetUniConnection(sServer, sUserName, sPassWord: string): Boolean;
var
bFlag: Boolean;
begin
bFlag := True;
try
try
if UniConnection <> nil then
UniConnection.Free;
UniConnection := TUniConnection.Create(nil);
UniConnection.ConnectString := 'ProviderName=Oracle;Username=' + sUserName + ';Password=' + sPassWord + ';Server=' + sServer + ';LoginPrompt=False;';
UniConnection.SpecificOptions.Values['Direct'] := 'True'; //设置TCP/TP协议(无客户端)连接模式为真
UniConnection.Connected := True;
except
on E: Exception do
begin
bFlag := False; //可以把错误提示放在调用时判断,也可以在封装函数判断
UniConnection.Connected := False;
if Pos(UpperCase('ORA-01017'), UpperCase(e.Message)) <> 0 then
MsgBox('对不起,您填入的服务器名称/用户名/密码错误,连接数据库失败!', '错误', MB_OK + MB_USERICON, 2, MB_ICONHAND)
else if Pos(UpperCase('ORA-12154'), UpperCase(e.Message)) <> 0 then
MsgBox('对不起,您填入的服务器名称错误,连接数据库失败!', '错误', MB_OK + MB_USERICON, 2, MB_ICONHAND)
else if Pos(UpperCase('ORA-12541'), UpperCase(e.Message)) <> 0 then
MsgBox('对不起,未检测到监听程序,请确认操作系统的〖服务组件〗中的监听服务已经启动,连接数据库失败!', '错误', MB_OK + MB_USERICON, 2, MB_ICONHAND)
else if Pos(UpperCase('11001'), UpperCase(e.Message)) <> 0 then
MsgBox('对不起,未检测到您填入的“服务器”,请确认服务器的IP地址或者计算机名称正确并且Ping命令测试连接正常,连接数据库失败!', '错误', MB_OK + MB_USERICON, 2, MB_ICONHAND)
else
MsgBox(PWideChar(WideString(e.Message)), '错误', MB_OK + MB_USERICON, 2, MB_ICONHAND); //显示详细错误信息
end;
end;
finally
Result := bFlag;
end;
end;
{-------------------------------------------------------------------------------
作者: 曾聪
日期: 2013.09.20
过程名: GetUniConnection
功能: 封装SQL连接ADO代码,判断是否已经连接,如果断开尝试连接
参数: 无
返回值: TUniConnection
说明: 主要在执行SQL前判断使用
-------------------------------------------------------------------------------}
function GetUniConnection: TUniConnection;
begin
if UniConnection = nil then
begin
MsgBox('尚未创建数据库连接', '错误', MB_OK + MB_USERICON, 2, MB_ICONHAND);
Result := nil;
Exit;
end;
try
if not UniConnection.Connected then
UniConnection.Connected := True;
except
on E: Exception do
MsgBox(PWideChar(WideString('调用GetADOConnection函数发生未知错误: ' + e.Message)), '错误', MB_OK + MB_USERICON, 2, MB_ICONHAND);
end;
Result := UniConnection;
end;
{-------------------------------------------------------------------------------
作者: 曾聪
日期: 2013.09.20
过程名: PrepareSql
功能: 封装SQL语句执行函数
参数: adoQry: TUniQuery; bQuery: Boolean; sMySql: string
返回值: Boolean
说明: 使用try......finally作为预留扩展内容
-------------------------------------------------------------------------------}
function PrepareSql(UniQuery: TUniQuery; bQuery: Boolean; sMySql: string): Boolean;
var
bFlag: Boolean;
begin
bFlag := True;
with UniQuery do
try
try
Connection := GetUniConnection;
Close;
SQL.Clear;
SQL.Add(sMySql);
if bQuery = True then
try
Open;
except
on E: Exception do
begin
bFlag := False;
MsgBox(PWideChar(WideString('对数据库执行查询操作发生错误:' + e.Message + '请关闭工具后重试!')), '错误', MB_OK + MB_USERICON, 2, MB_ICONEXCLAMATION);
end;
end
else
try
Connection.StartTransaction;
ExecSQL;
Connection.Commit;
except on E: Exception do
begin
Connection.Rollback;
bFlag := False;
MsgBox(PWideChar(WideString('对数据库执行更改操作发生错误:' + e.Message + ', 为了数据安全,已经回滚到操作更改前状态,请关闭工具后重试!')), '错误', MB_OK + MB_USERICON, 2, MB_ICONEXCLAMATION);
end;
end;
except
on E: Exception do
begin
bFlag := False;
ShowMessage(BoolToStr(bflag));
MsgBox(PWideChar(WideString('执行SQL语句发生错误:' + e.Message + ',请关闭工具后重试!')), '错误', MB_OK + MB_USERICON, 2, MB_ICONEXCLAMATION);
end;
end;
finally
Result := bFlag;
end;
end;
end.