日志记录函数公共库
This commit is contained in:
parent
0cc3a60d4c
commit
4c77143d0b
295
Delphi10/开发档案/Dp10RepoV1/public10/ThreeFun/Fun/U_log.pas
Normal file
295
Delphi10/开发档案/Dp10RepoV1/public10/ThreeFun/Fun/U_log.pas
Normal file
|
@ -0,0 +1,295 @@
|
|||
unit U_log;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, ComCtrls, ToolWin, ShlObj, cxShellCommon, cxControls, cxDropDownEdit,
|
||||
cxContainer, cxShellTreeView, cxShellListView, StdCtrls, BtnEdit,
|
||||
OleCtnrs, DB, ADODB,DBClient,cxGridDBTableView, cxStyles, cxCustomData,
|
||||
cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DBGrids, cxDBData,
|
||||
cxGridLevel, cxClasses, cxGridCustomView, StrUtils, Midas,cxMRUEdit,
|
||||
cxGridCustomTableView, cxGridTableView, cxTimeEdit, cxButtonEdit,
|
||||
cxTreeView, cxGrid, cxDBLookupComboBox, cxCalendar, cxCurrencyEdit,
|
||||
cxGridExportLink, cxMemo, cxTextEdit, RTComboBox, dxLayoutControl,RegularExpressions;
|
||||
|
||||
|
||||
function getCDSDataChangeLog(keyNo,SerialNoFieldName:string;TV_Edit: TcxGridDBTableView;ADOCmd:TADOQuery): string;
|
||||
function getMainDataChangeLog(dxLayoutControl:TdxLayoutControl;ADOQueryCmd:TADOQuery; mTag: Integer): String;
|
||||
function WriteChangeLog(FMainId,ModelStr,OperorStr:string;dxLayoutControl:TdxLayoutControl; mTag: Integer;ADO_Main:TADOQuery;SubIdFieldName,SerialNoFieldName:string;TV1: TcxGridDBTableView;ADO_Sub:TADOQuery; ADOQueryBaseCmd:TADOQuery): Boolean;
|
||||
//单表日志记录
|
||||
function WriteOneTableChangeLog(keyNo,ModelStr,OperorStr:string;dxLayoutControl:TdxLayoutControl; mTag: Integer;ADO_Main:TADOQuery;ADOQueryBaseCmd:TADOQuery): Boolean;
|
||||
//通过日志字符串写日志
|
||||
function WriteLog(keyNo,ModelStr,OperorStr:string;logStr:string;ADOQueryBaseCmd:TADOQuery): Boolean;
|
||||
implementation
|
||||
//////////////////////////////主明细表////////////////////////////////
|
||||
//FMainId:主表主键; ModelStr:模块名称; OperorStr:操作员,父类
|
||||
/// SubIdFieldName:子表主键
|
||||
//SerialNoFieldName 子表序号
|
||||
function WriteChangeLog(FMainId,ModelStr,OperorStr:string;dxLayoutControl:TdxLayoutControl; mTag: Integer;ADO_Main:TADOQuery;SubIdFieldName,SerialNoFieldName:string;TV1: TcxGridDBTableView;ADO_Sub:TADOQuery; ADOQueryBaseCmd:TADOQuery): Boolean;
|
||||
var
|
||||
TmpStr: string;
|
||||
mainlogStr,sublogstr:string;
|
||||
begin
|
||||
try
|
||||
Result := false;
|
||||
mainlogStr:=getMainDataChangeLog(dxLayoutControl,ADO_Main,mTag);
|
||||
sublogstr:=getCDSDataChangeLog(SubIdFieldName,SerialNoFieldName,TV1,ADO_Sub);
|
||||
TmpStr:= trim(mainlogStr) + trim(sublogstr) ;
|
||||
if TmpStr='' then
|
||||
begin
|
||||
result:=true;
|
||||
exit;
|
||||
end;
|
||||
with ADOQueryBaseCmd do begin
|
||||
close;
|
||||
sql.Clear;
|
||||
sql.Add(' insert into SY_SysLog(operor,opertime,Model,acction,opevent,result) values( ');
|
||||
sql.Add(' ' + quotedstr(Trim(OperorStr)));
|
||||
sql.Add(',getdate() ');
|
||||
sql.Add(',' + quotedstr(Trim(ModelStr)));
|
||||
sql.Add(',' + quotedstr(Trim('数据修改')));
|
||||
sql.Add(',' + quotedstr(TmpStr));
|
||||
sql.Add(',' + quotedstr(Trim('成功')));
|
||||
sql.Add(')');
|
||||
execsql;
|
||||
end;
|
||||
Result := True;
|
||||
except
|
||||
raise Exception.Create(PWideChar('保存数据修改日志时,发生错误!'));
|
||||
end;
|
||||
end;
|
||||
|
||||
//////////////////////
|
||||
//单表日志记录
|
||||
//FMainId:
|
||||
function WriteOneTableChangeLog(keyNo,ModelStr,OperorStr:string;dxLayoutControl:TdxLayoutControl; mTag: Integer;ADO_Main:TADOQuery;ADOQueryBaseCmd:TADOQuery): Boolean;
|
||||
var
|
||||
TmpStr: string;
|
||||
begin
|
||||
try
|
||||
Result := false;
|
||||
TmpStr:=getMainDataChangeLog(dxLayoutControl,ADO_Main,mTag);
|
||||
if TmpStr='' then
|
||||
begin
|
||||
result:=true;
|
||||
exit;
|
||||
end;
|
||||
with ADOQueryBaseCmd do begin
|
||||
close;
|
||||
sql.Clear;
|
||||
sql.Add(' insert into SY_SysLog(operor,opertime,Model,acction,opevent,result) values( ');
|
||||
sql.Add(' ' + quotedstr(Trim(OperorStr)));
|
||||
sql.Add(',getdate() ');
|
||||
sql.Add(',' + quotedstr(Trim(ModelStr)));
|
||||
sql.Add(',' + quotedstr(Trim('数据修改')));
|
||||
sql.Add(',' + quotedstr(TmpStr));
|
||||
sql.Add(',' + quotedstr(keyNo));
|
||||
sql.Add(')');
|
||||
execsql;
|
||||
end;
|
||||
Result := True;
|
||||
except
|
||||
raise Exception.Create(PWideChar('保存数据修改日志时,发生错误!'));
|
||||
end;
|
||||
end;
|
||||
|
||||
//////////////////////
|
||||
//通过日志字符串写日志
|
||||
function WriteLog(keyNo,ModelStr,OperorStr:string;logStr:string;ADOQueryBaseCmd:TADOQuery): Boolean;
|
||||
var
|
||||
TmpStr: string;
|
||||
begin
|
||||
try
|
||||
Result := false;
|
||||
if logStr='' then
|
||||
begin
|
||||
result:=true;
|
||||
exit;
|
||||
end;
|
||||
with ADOQueryBaseCmd do begin
|
||||
close;
|
||||
sql.Clear;
|
||||
sql.Add(' insert into SY_SysLog(operor,opertime,Model,acction,opevent,result) values( ');
|
||||
sql.Add(' ' + quotedstr(Trim(OperorStr)));
|
||||
sql.Add(',getdate() ');
|
||||
sql.Add(',' + quotedstr(Trim(ModelStr)));
|
||||
sql.Add(',' + quotedstr(Trim('数据修改')));
|
||||
sql.Add(',' + quotedstr(logStr));
|
||||
// sql.Add(',' + quotedstr(keyNo));
|
||||
sql.Add(',' + quotedstr(keyNo));
|
||||
sql.Add(')');
|
||||
execsql;
|
||||
end;
|
||||
Result := True;
|
||||
except
|
||||
raise Exception.Create(PWideChar('保存数据修改日志时,发生错误!'));
|
||||
end;
|
||||
end;
|
||||
|
||||
function getCDSDataChangeLog(keyNo,SerialNoFieldName:string;TV_Edit: TcxGridDBTableView;ADOCmd:TADOQuery): string;
|
||||
var
|
||||
i,k: integer;
|
||||
TmpLogStr: string;
|
||||
TmpField: TField;
|
||||
TmpColumn: TcxGridDBColumn;
|
||||
mLogStr:string;
|
||||
CDS_Edit: TClientDataset;
|
||||
begin
|
||||
mLogStr := '';
|
||||
result:='';
|
||||
CDS_Edit:= TV_Edit.DataController.DataSource.DataSet as TClientDataset;
|
||||
try
|
||||
if TV_Edit = nil then
|
||||
begin
|
||||
exit;
|
||||
end;
|
||||
if CDS_Edit = nil then
|
||||
begin
|
||||
exit;
|
||||
end;
|
||||
if TV_Edit.DataController.DataSource.DataSet <> CDS_Edit then
|
||||
begin
|
||||
exit;
|
||||
end;
|
||||
// LogEntry := Format('表[%s] 字段[%s] 从[%s] 改为[%s] 时间[%s] 用户[%s]',
|
||||
with ADOCmd do
|
||||
begin
|
||||
First;
|
||||
k:=1;
|
||||
while not eof do
|
||||
begin
|
||||
if not CDS_Edit.Locate(keyNo, FieldByName(keyNo).Value, []) then
|
||||
begin
|
||||
Continue;
|
||||
end;
|
||||
TmpLogStr := '';
|
||||
for i := 0 to Fields.Count-1 do
|
||||
begin
|
||||
TmpField := CDS_Edit.FindField(Fields[i].FieldName);
|
||||
TmpColumn := TV_Edit.GetColumnByFieldName(Fields[i].FieldName);
|
||||
if (TmpField <> nil) and (TmpColumn <> nil) and (Trim(Fields[i].AsString) <> Trim(TmpField.AsString)) then
|
||||
begin
|
||||
TmpLogStr := TmpLogStr + '[' + TmpColumn.Caption + ':' + trim(Fields[i].AsString) + '→' + trim(TmpField.AsString) + ']';
|
||||
end;
|
||||
end;
|
||||
if TmpLogStr <> '' then
|
||||
begin
|
||||
if (SerialNoFieldName<>'') and (Fields.FindField(SerialNoFieldName)<>nil) then
|
||||
mLogStr := mLogStr + '{' + '序号:' + trim(FieldByName(SerialNoFieldName).AsString) + '|' + trim(FieldByName(keyNo).AsString) + TmpLogStr + '}'+#10#13
|
||||
else
|
||||
mLogStr := mLogStr + '{' + '序号:' + inttostr(k) + '|' + trim(FieldByName(keyNo).AsString) + TmpLogStr + '}'+#10#13 ;
|
||||
end;
|
||||
Next;
|
||||
end;
|
||||
end;
|
||||
|
||||
result:=mLogStr;
|
||||
except
|
||||
raise Exception.Create(PWideChar('获取修改字段时,发生错误!'));
|
||||
end;
|
||||
end;
|
||||
|
||||
function getMainDataChangeLog(dxLayoutControl:TdxLayoutControl;ADOQueryCmd:TADOQuery; mTag: Integer): String;
|
||||
var
|
||||
i: integer;
|
||||
mLogStr,mcaption:string;
|
||||
mOldValue,mNewValue:string;
|
||||
begin
|
||||
try
|
||||
mLogStr := '';
|
||||
with dxLayoutControl do
|
||||
begin
|
||||
for i := 0 to ControlCount - 1 do
|
||||
begin
|
||||
mcaption:=TRegEx.Replace(trim(dxLayoutControl.FindItem(Controls[i]).CaptionOptions.Text), '\[.*?\]', '');
|
||||
mOldValue:=trim(ADOQueryCmd.fieldByName(Controls[i].Name).AsString);
|
||||
|
||||
if Controls[i].Tag = mTag then
|
||||
begin
|
||||
if Controls[i] is TcxButtonEdit then
|
||||
begin
|
||||
mNewValue:= Trim(TcxButtonEdit(Controls[i]).Text) ;
|
||||
if Trim(ADOQueryCmd.fieldByName(Controls[i].Name).AsString) <> mNewValue then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' +mOldValue + '→' + mNewValue + ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TcxCurrencyEdit then
|
||||
begin
|
||||
mNewValue:= Trim(TcxCurrencyEdit(Controls[i]).Text) ;
|
||||
if ADOQueryCmd.fieldByName(Controls[i].Name).Value <> TcxCurrencyEdit(Controls[i]).Value then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' + mOldValue + '→' + mNewValue + ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TcxTextEdit then
|
||||
begin
|
||||
mNewValue:= Trim(TcxTextEdit(Controls[i]).Text) ;
|
||||
if Trim(ADOQueryCmd.fieldByName(Controls[i].Name).AsString) <> mNewValue then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' +mOldValue + '→' + mNewValue + ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TcxMRUEdit then
|
||||
begin
|
||||
mNewValue:= Trim(TcxMRUEdit(Controls[i]).Text) ;
|
||||
if Trim(ADOQueryCmd.fieldByName(Controls[i].Name).AsString) <> mNewValue then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' +mOldValue + '→' + mNewValue + ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TRichEdit then
|
||||
begin
|
||||
mNewValue:= Trim(TRichEdit(Controls[i]).Text) ;
|
||||
if ADOQueryCmd.fieldByName(Controls[i].Name).AsString <> mNewValue then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' + mOldValue + '→' + mNewValue+ ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TcxComboBox then
|
||||
begin
|
||||
mNewValue:= Trim(TcxComboBox(Controls[i]).Text) ;
|
||||
if Trim(ADOQueryCmd.fieldByName(Controls[i].Name).AsString) <> mNewValue then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' + mOldValue + '→' + mNewValue+ ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TcxDateEdit then
|
||||
begin
|
||||
mNewValue:= Trim(TcxDateEdit(Controls[i]).Text) ;
|
||||
if ADOQueryCmd.fieldByName(Controls[i].Name).AsDateTime <> TcxDateEdit(Controls[i]).Date then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' + mOldValue+ '→' + mNewValue + ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TcxMemo then
|
||||
begin
|
||||
mNewValue:= Trim(TcxMemo(Controls[i]).Text) ;
|
||||
if Trim(ADOQueryCmd.fieldByName(Controls[i].Name).AsString) <> mNewValue then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' + mOldValue + '→' + mNewValue + ']';
|
||||
end;
|
||||
end
|
||||
else if Controls[i] is TcxTimeEdit then
|
||||
begin
|
||||
if ADOQueryCmd.fieldByName(Controls[i].Name).AsDateTime <> TcxTimeEdit(Controls[i]).Time then
|
||||
begin
|
||||
mLogStr := mLogStr + '[' + mcaption + ':' + mOldValue + '→' + Trim(TcxTimeEdit(Controls[i]).Text) + ']';
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if mLogStr = '' then
|
||||
begin
|
||||
exit;
|
||||
end;
|
||||
mLogStr:=mLogStr + #13#10 ;
|
||||
result:=mLogStr;
|
||||
except
|
||||
raise Exception.Create(PWideChar('获取修改字段时,发生错误!'));
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
Loading…
Reference in New Issue
Block a user