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

نسخة كاملة : مسح / تفريغ بيانات جدول Firebird
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
كيف يتم تفريغ كلي لجدول قواعد البيانات Firebird ؟؟؟
الإتصال عن طريق (AdoConnection)
في الحالة العادية (بارادوكس) و مكون Table أو Absolute و مكون ABSTable

كود :
Table1.Close; Table1.EmptyTable; Table1.Open
هذا الكود لا ينفع مع AdoTable
[INDENT]
يمكنك استعمال ال sql :

كود :
Delete From MyTable
[/INDENT]
delete * from yourTable
[INDENT]
الكاسر الآخر كتب :delete * from yourTable

هل أنت متأكد من الصيغة ؟
على ما أعتقد أنه لا يوجد *

وانظر

كود :
http://sql.sh/cours/delete

[/INDENT]
يا إخوان أنا لا أقصد الحذف في حد ذاته (عن طريق الإستعلام البنيوي SQL أو غيره)
كود :
Table1.Delete;
و لكني أقصد مسح كافة البيانات حيث يتم إرجاع ملف القاعدة إلى حجمه الأول (الاصلي عندما كان فارغا)
بصيغة أخرى عندما يتم ملأ الجدول إلى حد معين فإن حجمه يزيد ، و عندما يتم مسح كافة السجلات يبقى نفس الحجم رغم خلوه من السجلات
في البارادوكس مثلا
كود :
While Not Table1.IsEmpty do Table1.Delete;
هذا الأمر يؤدي إلى مسح كافة السجلات لكن يبقى حجم ملف MB ، و كأن الجدول ليس فارغا ، بينما:
كود :
Table1.Close; Table1.EmptyTable; Table1.Open
يتم مسح كل السجلات و إرجاع الملف إلى حجمه الأصلي
السؤال الآن: هذا الأمر لا ينفع مع AdoTable فما هو الحل إذن ؟؟؟
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;
[INDENT]
أخي الكاسر الآخر شكرا على المعلومة ، رغم أن في Interbase 7.5 لا يقبل *.

بالنسبةلأخي نبيل ،
إذن أنت تبحث عن الحذف الفزيائي (الحقيقي ) للسجلات.
بالنسبة لقواعد البيانات Firebird ، يمكن عمل تخزين sauvegarde ثم استرجاع restauration

backup restore
باستعمال GBack

كود :
http://www.destructor.de/firebird/gbak.htm
[/INDENT]
نعم يمكن ان تستخدم * أو بدونها ليس هناك مشكلة

أما عن اـ FireBird أنا لا أستخدمها ولكن حسبما قرأت فإنه ليس هناك طريقة لمسح السجلات المحذوفة ألا بعملية النسخ ااحتياطي والاسترجاع لأن Fb تستخدم المساحة التي تشغلعا الملفات المحذوفة عند الحاجة إليها فقط وهذا يمكن أن يكون عيبا في Fb
أخي Unprogramme كلامك صحيح والسبب يقع في إختلاف قواعد البيانات المستخدمة فأنا أستخدم MsAccess و Sql server ..
[INDENT]
وايضا الموضوع التالي سيفيدك بإذن الله تعالى .

أداة مجانية لإصلاح قواعد بيانات نوع FireBird/Interbase
[/INDENT]
الصفحات : 1 2 3