![]() |
|
مسح / تفريغ بيانات جدول Firebird - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : مسح / تفريغ بيانات جدول Firebird (/showthread.php?tid=6839) |
مسح / تفريغ بيانات جدول Firebird - nabilkeb - 03-03-2015 كيف يتم تفريغ كلي لجدول قواعد البيانات Firebird ؟؟؟ الإتصال عن طريق (AdoConnection) في الحالة العادية (بارادوكس) و مكون Table أو Absolute و مكون ABSTable كود : Table1.Close;
Table1.EmptyTable;
Table1.Openمسح / تفريغ بيانات جدول Firebird - أبو معاذ - 03-03-2015 [INDENT] يمكنك استعمال ال sql : كود : Delete From MyTableمسح / تفريغ بيانات جدول Firebird - الكاسر الآخر - 03-03-2015 delete * from yourTable مسح / تفريغ بيانات جدول Firebird - أبو معاذ - 03-03-2015 [INDENT] الكاسر الآخر كتب :delete * from yourTable هل أنت متأكد من الصيغة ؟ على ما أعتقد أنه لا يوجد * وانظر كود : http://sql.sh/cours/delete[/INDENT] مسح / تفريغ بيانات جدول Firebird - nabilkeb - 03-03-2015 يا إخوان أنا لا أقصد الحذف في حد ذاته (عن طريق الإستعلام البنيوي SQL أو غيره) كود : Table1.Delete;بصيغة أخرى عندما يتم ملأ الجدول إلى حد معين فإن حجمه يزيد ، و عندما يتم مسح كافة السجلات يبقى نفس الحجم رغم خلوه من السجلات في البارادوكس مثلا كود : While Not Table1.IsEmpty do Table1.Delete;كود : Table1.Close;
Table1.EmptyTable;
Table1.Openالسؤال الآن: هذا الأمر لا ينفع مع AdoTable فما هو الحل إذن ؟؟؟ مسح / تفريغ بيانات جدول Firebird - الكاسر الآخر - 03-03-2015 Unprogramme كتب :هل أنت متأكد من الصيغة ؟ على ما أعتقد أنه لا يوجد *نعم يمكن ان تستخدم * أو بدونها ليس هناك مشكلة بانسبة لـ ADO .. اذا كنت تستخدم Ms Access فعليك عمل compact لقاعدة البيانات .. لقد وجدت لك هذا الكود ولكنني لم أجربه كود : var
dao: OLEVariant;
begin
dao := CreateOleObject('DAO.DBEngine.35');
dao.CompactDatabase('d:\yourDatabaseName.mdb',
'd:\yourNewCompactedDatabaseName.mdb');
end;وأيضا هذا الكود (الذي يشترط أن تكون خاصية connected في Adoconnection <> true في وقت التصميم) كود : uses ComObj;
procedure JroRefreshCache(ADOConnection: TADOConnection);
var
JetEngine: OleVariant;
begin
if not ADOConnection.Connected then Exit;
JetEngine := CreateOleObject('jro.JetEngine');
JetEngine.RefreshCache(ADOConnection.ConnectionObject);
end;
procedure JroCompactDatabase(const Source, Destination: string);
var
JetEngine: OleVariant;
begin
JetEngine := CreateOleObject('jro.JetEngine');
JetEngine.CompactDatabase(
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Source,
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Destination + ';Jet OLEDB:Engine Type=5');
end;
procedure CompactDatabase(const MdbFileName: string;
ADOConnection: TADOConnection=nil;
const ReopenConnection: Boolean=True);
var
LdbFileName, TempFileName: string;
FailCount: Integer;
FileHandle: Integer;
begin
TempFileName := ChangeFileExt(MdbFileName, '.temp.mdb');
if Assigned(ADOConnection) then
begin
// force the database engine to write data to disk, releasing locks on memory
JroRefreshCache(ADOConnection);
// close the connection - this will also close all associated datasets
ADOConnection.Close;
end;
// ADOConnection.Close SHOULD delete the ldb
// force delete of ldb lock file just in case if we don't have an active ADOConnection
LdbFileName := ChangeFileExt(MdbFileName, '.ldb');
if FileExists(LdbFileName) then
DeleteFile(LdbFileName); // could fail because data is still locked - we ignore this
// delete temp file if any
if FileExists(TempFileName) then
if not DeleteFile(TempFileName) then
RaiseLastOSError;
// try to open for exclusive use
FailCount := 0;
repeat
FileHandle := FileOpen(MdbFileName, fmShareExclusive);
try
if FileHandle = -1 then // error
begin
Inc(FailCount);
Sleep(100); // give the database engine time to close completely and unlock
end
else
begin
FailCount := 0;
Break; // success
end;
finally
FileClose(FileHandle);
end;
until FailCount = 10; // maximum 1 second of attempts
if FailCount <> 0 then // file is probably locked by another user/process
raise Exception.Create(Format('Error opening %s for exclusive use.', [MdbFileName]));
// compact the db
JroCompactDatabase(MdbFileName, TempFileName);
// copy temp file to original mdb and delete temp file on success
if Windows.CopyFile(PChar(TempFileName), PChar(MdbFileName), False) then
DeleteFile(TempFileName)
else
RaiseLastOSError;
// reopen ADOConnection
if Assigned(ADOConnection) and ReopenConnection then
ADOConnection.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CompactDatabase('F:\Projects\DB\mydb.mdb', ADOConnection1, True);
// reopen DataSets
ADODataSet1.Open;
end;مسح / تفريغ بيانات جدول Firebird - أبو معاذ - 03-03-2015 [INDENT] أخي الكاسر الآخر شكرا على المعلومة ، رغم أن في Interbase 7.5 لا يقبل *. بالنسبةلأخي نبيل ، إذن أنت تبحث عن الحذف الفزيائي (الحقيقي ) للسجلات. بالنسبة لقواعد البيانات Firebird ، يمكن عمل تخزين sauvegarde ثم استرجاع restauration backup restore باستعمال GBack كود : http://www.destructor.de/firebird/gbak.htmمسح / تفريغ بيانات جدول Firebird - الكاسر الآخر - 03-03-2015 نعم يمكن ان تستخدم * أو بدونها ليس هناك مشكلة أما عن اـ FireBird أنا لا أستخدمها ولكن حسبما قرأت فإنه ليس هناك طريقة لمسح السجلات المحذوفة ألا بعملية النسخ ااحتياطي والاسترجاع لأن Fb تستخدم المساحة التي تشغلعا الملفات المحذوفة عند الحاجة إليها فقط وهذا يمكن أن يكون عيبا في Fb مسح / تفريغ بيانات جدول Firebird - الكاسر الآخر - 03-03-2015 أخي Unprogramme كلامك صحيح والسبب يقع في إختلاف قواعد البيانات المستخدمة فأنا أستخدم MsAccess و Sql server .. مسح / تفريغ بيانات جدول Firebird - أبو معاذ - 03-03-2015 [INDENT] وايضا الموضوع التالي سيفيدك بإذن الله تعالى . أداة مجانية لإصلاح قواعد بيانات نوع FireBird/Interbase [/INDENT] |