unit LoggerPro.DBAppender.ADO;
// DB log appender - using dbGo aka ADO
interface
uses
System.Classes,
LoggerPro, System.SysUtils, Data.DB,
LoggerPro.DBAppender,
Data.Win.ADODB;
type
ESQLException = class(Exception)
private
FErrorCode: Integer;
public
constructor Create(AMessage: string; AErrorCode: Integer); overload;
constructor Create(StoredProc: TADOStoredProc); overload;
end;
/// LoggerPro that persists to DB via ADO stored procedure
TLoggerProDBAppenderADO = class(TLoggerProDBAppender)
protected
procedure RefreshParams(DataObj: TADOStoredProc); override;
procedure ExecuteDataObject(DataObj: TADOStoredProc); override;
public
procedure Setup; override;
procedure TearDown; override;
end;
implementation
uses
System.IOUtils, Winapi.ActiveX;
{ ESQLException }
constructor ESQLException.Create(AMessage: string; AErrorCode: Integer);
begin
inherited Create(AMessage);
FErrorCode := AErrorCode;
end;
constructor ESQLException.Create(StoredProc: TADOStoredProc);
var
LastErrorIdx: Integer;
begin
if StoredProc.Connection <> nil then
begin
LastErrorIdx := StoredProc.Connection.Errors.Count - 1;
Create(StoredProc.Connection.Errors.Item[LastErrorIdx].Description, StoredProc.Connection.Errors.Item[LastErrorIdx]
.NativeError);
end;
end;
{ TLoggerProDBAppenderADO }
procedure TLoggerProDBAppenderADO.ExecuteDataObject(DataObj: TADOStoredProc);
begin
DataObj.ExecProc;
if DataObj.Connection.Errors.Count > 0 then
raise ESQLException.Create(DataObj);
end;
procedure TLoggerProDBAppenderADO.RefreshParams(DataObj: TADOStoredProc);
begin
DataObj.Parameters.Refresh;
end;
procedure TLoggerProDBAppenderADO.Setup;
begin
CoInitialize(nil);
inherited;
end;
procedure TLoggerProDBAppenderADO.TearDown;
begin
inherited;
CoUninitialize;
end;
end.