delphi4arab منتديات دلفي للعرب

نسخة كاملة : حفظ نسخة من قاعدة البيانات في ملف Zip أو Rar
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم


شاهدة في أحد البرامج طريقة رائعة في حفظ نسخة من قاعدة البيانات على شكل ملف مضغوط
كأرشف مثلاً و إستعادتها لما يريد المستخدم هذا
أضن أنه يوجد مكون يلبي هذا الغرض بحثت ولم أجد المكون المتوافق مع نسخة Delphi XE
و عليكم السلام
إبحث جيدا تجد مكونات تقوم بالضغط هذه وظيفة تقوم بضغط الملفات :
كود :
uses [color=Red]ZLib[/color] procedure CompressFiles(Files : TStrings; const Filename : String); var infile, outfile, tmpFile : TFileStream; compr : TCompressionStream; i,l : Integer; s : String; begin if Files.Count > 0 then begin outFile := TFileStream.Create(Filename,fmCreate); try { the number of files } l := Files.Count; outfile.Write(l,SizeOf(l)); for i := 0 to Files.Count-1 do begin infile := TFileStream.Create(Files[i],fmOpenRead); try { the original filename } s := ExtractFilename(Files[i]); l := Length(s); outfile.Write(l,SizeOf(l)); outfile.Write(s[1],l); { the original filesize } l := infile.Size; outfile.Write(l,SizeOf(l)); { compress and store the file temporary} tmpFile := TFileStream.Create('tmp',fmCreate); compr := TCompressionStream.Create(clMax,tmpfile); try compr.CopyFrom(infile,l); finally compr.Free; tmpFile.Free; end; { append the compressed file to the destination file } tmpFile := TFileStream.Create('tmp',fmOpenRead); try outfile.CopyFrom(tmpFile,0); finally tmpFile.Free; end; finally infile.Free; end; end; finally outfile.Free; end; DeleteFile('tmp'); end; end;
لفك الضغط :
كود :
procedure DecompressFiles(const Filename, DestDirectory : String); var dest,s : String; decompr : TDecompressionStream; infile, outfile : TFilestream; i,l,c : Integer; begin // IncludeTrailingPathDelimiter (D6/D7 only) dest := IncludeTrailingPathDelimiter(DestDirectory); infile := TFileStream.Create(Filename,fmOpenRead); try { number of files } infile.Read(c,SizeOf(c)); for i := 1 to c do begin { read filename } infile.Read(l,SizeOf(l)); SetLength(s,l); infile.Read(s[1],l); { read filesize } infile.Read(l,SizeOf(l)); { decompress the files and store it } s := dest+s; //include the path outfile := TFileStream.Create(s,fmCreate); decompr := TDecompressionStream.Create(infile); try outfile.CopyFrom(decompr,l); finally outfile.Free; decompr.Free; end; end; finally infile.Free; end; end;

للتنفيذ:

PHP كود :
CompressFiles(ListBox1.Items,'c:\Folder.myzip'); 
وجدت مكون VCLZip Pro متخصص في تحزيم ملفات قواعد البيانات مثلاً Access على شكل ملف zip
و يقوم تلقائياً بتسمية الملف بتاريخ اليوم و يتيح لك إستعادة ملف قاعدة البيانات متى أردت
و هذا ما أبحث عنه بالضبط لكن المشكلة أنه متوافق مع Delphi 7 و Delphi 6 و Delphi 5
أخي لا داعي لكل هذا اليك الكود
كود :
application.Terminate; ShellExecute(Handle,'','WinRar','a NOM.rar *.* ',nil, SW_NORMAL)

قم بتغيير بياناتك فقط اسم قاعدة البيانات و نوع الملفات المراد وضعها في ارشيف
هل يمكن التوضيح أكثر لإنني وجدت كود ولم استطع التغيير عليه او حتي فهمه
وخاصة الفقرة الأخيرة

var
archiver : TZipForge;

begin
// Create an instance of the TZipForge class
archiver := TZipForge.Create(nil);
try
with archiver do
begin
// Set the name of the archive file we want to create
FileName := 'C:\test.zip';
// Because we create a new archive,
// we set Mode to fmCreate
OpenArchive(fmCreate);
// Set base (default) directory for all archive operations
BaseDir := 'C:\';
// Add file C:\test.txt the archive; wildcards can be used as well
AddFiles('c:\test.txt');
CloseArchive();
end;
except
on E: Exception do
begin
Writeln('Exception: ', E.Message);
// Wait for the key to be pressed
Readln;
end;
end;