D10DJkaimengwenshang/项目代码/wenshangkm/机台检验主程序可配置20201/机台检验主程序可配置2020/U_FileAutoUpdate.pas

346 lines
10 KiB
ObjectPascal
Raw Normal View History

2025-09-27 14:24:10 +08:00
unit U_FileAutoUpdate;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, ShlObj, cxShellCommon, cxControls,
cxContainer, cxShellTreeView, cxShellListView, StdCtrls, BtnEdit,
OleCtnrs, DB, ADODB,ZLib;
function ExportFtErpFile(mFileName:string;ADORead:TADOQuery):boolean;
function ExportFtErpFile10(mFileName:string;ADORead:TADOQuery):boolean;
procedure GetFileInfo(mFile:string;var mfileSize:integer;var CreationTime:tdatetime;var WriteTime:tdatetime);
function CovFileDate(Fd:_FileTime):TDateTime;
procedure UpdateFileTime(FileName:string; CreationTime, LastAccessTime, LastWriteTime:TDateTime);
implementation
uses
U_CompressionFun;
///////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
///////////////////////////////////////////////////////
function ExportFtErpFile10(mFileName:string;ADORead:TADOQuery):boolean;
var
Stream : TMemoryStream;
ff:TADOBlobstream;
mfileSize:integer;
mCreationTime:TdateTime;
mWriteTime:TdateTime;
IsFileHas:boolean;
mChildPath:string;
mFilePath:string;
begin
try
result:=false;
mChildPath:='';
///////////////////////////////////////////////
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>·<EFBFBD><C2B7>
with ADORead do
begin
close;
sql.Clear ;
sql.Add('select FilePath ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
Open;
if RecordCount>0 then
begin
// if not fieldByName('valid').AsBoolean then exit;
if trim(fieldByName('FilePath').AsString)<>'' then
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
end;
end;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
mFilePath:= ExtractFilePath(Paramstr(0))+mChildPath;
IsFileHas:= FileExists(mFilePath+mFileName);
if IsFileHas then
begin
//////////////////////////
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
GetFileInfo(mFilePath+mFileName,mfileSize,mCreationTime,mWriteTime);
end;
//////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
if IsFileHas then
begin
with ADORead do
begin
close;
sql.Clear ;
sql.Add('select count(FileName) as cnt ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
// sql.Add('and fileEditDate>'''+formatDateTime('yyyy-MM-dd hh:mm',mWriteTime)+'''');
sql.Add(' and DATEDIFF(minute,'+ quotedStr(formatDateTime('yyyy-MM-dd hh:mm',mWriteTime))+',fileEditDate)>0');
Open;
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD>
if fieldByName('cnt').AsInteger>0 then
begin
close;
sql.Clear ;
sql.Add('select * ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
Open;
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
end
else
begin
exit;
end;
if trim(fieldByName('FilePath').AsString)<>'' then
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
end;
end
//////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else
begin
with ADORead do
begin
close;
sql.Clear ;
sql.Add('select * ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
Open;
if recordCount>0 then
begin
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
end
else
begin
exit;
end;
if trim(fieldByName('FilePath').AsString)<>'' then
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
end;
end;
if ff<>nil then
begin
try
mfileName:=trim(ADORead.fieldByName('FileName').asString);
if not DirectoryExists(ExtractFileDir(mFilePath+mfileName)) then
ForceDirectories(ExtractFileDir(mFilePath+mfileName));
Stream:= TMemoryStream.Create ;
//OleContainer1.SaveToStream(Stream);
//ADOQuery1FileContent.SaveToFile('tmp'); //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>
//OleContainer1.LoadFromFile('tmp'); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡOLE<4C><45><EFBFBD><EFBFBD>
ff.SaveToStream(Stream);
CompressionStream(Stream); //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
//OleContainer1.SaveToFile(ExtractFilePath(Paramstr(0))+mfielName)
Stream.SaveToFile(mFilePath+mfileName); //+'\tmpFile\'
//OleContainer1.SaveToFile('tmp');
finally
Stream.Free ;
ff.free;
end;
end;
UpdateFileTime(mFilePath+mfileName,ADORead.fieldByName('FileCreateDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime);
Result:=true;
except
application.MessageBox(pchar('<27><>ȡ<EFBFBD>ļ<EFBFBD>'+mfileName+<><CAA7>!'),'<27><>ʾ<EFBFBD><CABE>Ϣ',0);
end;
end;
///////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
///////////////////////////////////////////////////////
function ExportFtErpFile(mFileName:string;ADORead:TADOQuery):boolean;
var
Stream : TMemoryStream;
ff:TADOBlobstream;
mfileSize:integer;
mCreationTime:TdateTime;
mWriteTime:TdateTime;
IsFileHas:boolean;
mChildPath:string;
mFilePath:string;
begin
try
result:=false;
mChildPath:='';
///////////////////////////////////////////////
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>·<EFBFBD><C2B7>
with ADORead do
begin
close;
sql.Clear ;
sql.Add('select FilePath ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
Open;
if RecordCount>0 then
begin
// if not fieldByName('valid').AsBoolean then exit;
if trim(fieldByName('FilePath').AsString)<>'' then
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
end;
end;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
mFilePath:= ExtractFilePath(Paramstr(0))+mChildPath;
IsFileHas:= FileExists(mFilePath+mFileName);
if IsFileHas then
begin
//////////////////////////
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
GetFileInfo(mFilePath+mFileName,mfileSize,mCreationTime,mWriteTime);
end;
//////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
if IsFileHas then
begin
with ADORead do
begin
close;
sql.Clear ;
sql.Add('select count(FileName) as cnt ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
// sql.Add('and fileEditDate>'''+formatDateTime('yyyy-MM-dd hh:mm',mWriteTime)+'''');
sql.Add(' and DATEDIFF(minute,'+ quotedStr(formatDateTime('yyyy-MM-dd hh:mm',mWriteTime))+',fileEditDate)>0');
Open;
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD>
if fieldByName('cnt').AsInteger>0 then
begin
close;
sql.Clear ;
sql.Add('select * ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
Open;
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
end
else
begin
exit;
end;
if trim(fieldByName('FilePath').AsString)<>'' then
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
end;
end
//////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else
begin
with ADORead do
begin
close;
sql.Clear ;
sql.Add('select * ');
sql.Add('from RT_FileUpdate');
sql.Add('where FileName='+quotedStr(mFileName));
Open;
if recordCount>0 then
begin
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
end
else
begin
exit;
end;
if trim(fieldByName('FilePath').AsString)<>'' then
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
end;
end;
if ff<>nil then
begin
try
mfileName:=trim(ADORead.fieldByName('FileName').asString);
if not DirectoryExists(ExtractFileDir(mFilePath+mfileName)) then
ForceDirectories(ExtractFileDir(mFilePath+mfileName));
Stream:= TMemoryStream.Create ;
//OleContainer1.SaveToStream(Stream);
//ADOQuery1FileContent.SaveToFile('tmp'); //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>
//OleContainer1.LoadFromFile('tmp'); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡOLE<4C><45><EFBFBD><EFBFBD>
ff.SaveToStream(Stream);
//OleContainer1.SaveToFile(ExtractFilePath(Paramstr(0))+mfielName)
Stream.SaveToFile(mFilePath+mfileName); //+'\tmpFile\'
//OleContainer1.SaveToFile('tmp');
finally
Stream.Free ;
ff.free;
end;
end;
UpdateFileTime(mFilePath+mfileName,ADORead.fieldByName('FileCreateDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime);
Result:=true;
except
application.MessageBox(pchar('<27><>ȡ<EFBFBD>ļ<EFBFBD>'+mfileName+<><CAA7>!'),'<27><>ʾ<EFBFBD><CABE>Ϣ',0);
end;
end;
////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////
procedure GetFileInfo(mFile:string;var mfileSize:integer;var CreationTime:tdatetime;var WriteTime:tdatetime);
var
vSearchRec: TSearchRec;
begin
FindFirst(mFile,faAnyFile,vSearchRec);
mfileSize:=vSearchRec.Size;
CreationTime:=CovFileDate(vSearchRec.FindData.ftCreationTime);//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//vSearchRec.FindData.ftLastAccessTime//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
WriteTime:=CovFileDate(vSearchRec.FindData.ftLastWriteTime);//<2F>޸<EFBFBD>ʱ<EFBFBD><CAB1>
FindClose(vSearchRec);
end;
///////////////////////////////////////////////
//
/////////////////////////////////////////////
function CovFileDate(Fd:_FileTime):TDateTime;
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
procedure UpdateFileTime(FileName:string; CreationTime, LastAccessTime, LastWriteTime:TDateTime);
var
FileHnd : Integer;
SysTime : TSystemTime;
tTzi: TTimezoneInformation;
FCreationTime, FLastAccessTime, FLastWriteTime: TFileTime;
begin
GetTimezoneInformation(tTzi) ;
CreationTime := CreationTime+Ttzi.Bias/1440;
DateTimeToSystemTime(CreationTime,SysTime);
SystemTimeToFileTime(SysTime,FCreationTime);
//LastAccessTime := LastAccessTime + Ttzi.Bias/1440;
//DateTimeToSystemTime(LastAccessTime,SysTime);
//SystemTimeToFileTime(SysTime,FLastAccessTime);
LastWriteTime := LastWriteTime + Ttzi.Bias/1440;
DateTimeToSystemTime(LastWriteTime,SysTime);
SystemTimeToFileTime(SysTime,FLastWriteTime);
try
FileHnd := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
SetFileTime(FileHnd, @FCreationTime, nil, @FLastWriteTime);
finally
FileClose(FileHnd);
end;
end;
end.