日志记录函数公共库
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