الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Corrupt Index

مغلق
بدأه violablue في 19 أكتوبر 2001 · 2 رد · 641 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الاعزاء

تظهر لي هذه الرسالة عندما اقوم بالغاء سجل معين

علما ان استعمل قاعدة بيانات Paradox

مع الشكر

#2

]عني هذا وجود مشكلة في الاندكس , وتحدت هده المشكلة نتيجة لاستخدام قاعدة البيانات فترة طويلة و نتيجة لاجراء عدة عمليات الغاء , ويمكن ان تحل ه>ه المشكلة بطريقتين رئيسيتين

1- اولا قم بتصليح الاندكس وسوف تجده في هذا الموضوع

http://arabteam.nicmatic.com/vb/showthread...3?threadid=4476

وهو موضوع سابق بعنوان (ادوات لاصلاح اعطال قواعد بيانات Paradox)

2-قم باجراء عملية رص لقاعدة اليانات وسوف تجد الوضوع في ملتقى المبرمجين العرب وهدا هو نص الموضوع منقولا عن مليقى المبرمجين العر ب

رصّ ملفات قواعد البيانات Packing Database Files

نحتاج بين فترة وأخرى إلى رصّ ملفات قواعد البيانات لـParadox و dBase والتي تستخدم عملية الحذف السطحي Soft Deletion للسجلات ولإعادة تنظيم الملف بشكل عام مما يقلل من خطر تعرّضه للمشاكل، فيما يلي الإجراء المستخدم لذلك وطريقة استخدامه.

uses BDE;

procedure TForm1.PackTable(Sender: TObject; TabName: PChar);

var

hDb :hDBIDb;

hCursor :hDBICur;

dbResult :DBIResult;

PdxStruct :CRTblDesc;

begin

{Initialize the BDE.}

dbResult := DbiInit(nil);

Check(dbResult) ;

{Open a Database.}

dbResult := DbiOpenDatabase('','STANDARD',dbiREADONLY,dbiOPENSHARED,'', 0,nil,nil,hDB);

try

{Check raises an exception if the BDE call returns an error code other than DBIERR_NONE.

The DBTables unit must be in the uses clause to use Check.

In Delphi 2 this procedure is located in the DB unit.}

Check(dbResult);

except

DbiExit;

raise

end;

{Open a table. This returns a handle to the table's

cursor, which is required by many of the BDE calls.}

dbResult := DbiOpenTable(hDB, TabName, '','','',0,dbiREADWRITE, dbiOPENEXCL,xltNONE,False,nil,hCursor);

try

Check(dbResult);

except

DbiCloseDatabase(hDB);

DbiExit;

raise

end;

try

Panel1.Caption := 'Packing '+ FileListBox1.FileName;

Application.ProcessMessages;

if AnsiUpperCase(ExtractFileExt(FileListBox1.FileName)) = '.DB' then begin

{Close the Paradox table cursor handle.}

DbiCloseCursor(hCursor);

{The method DoRestructure requires a pointer to a record

object of the type CRTblDesc. Initialize this record.}

FillChar(PdxStruct, SizeOf(CRTblDesc),0);

StrPCopy( PdxStruct.szTblName,FileListBox1.Filename);

PdxStruct.bPack := True;

dbResult := DbiDoRestructure(hDB,1,@PdxStruct,nil,nil,nil,False);

if dbResult = DBIERR_NONE then Panel1.Caption := 'Table successfully packed'

else Panel1.Caption := 'Failure: error '+IntTostr(dbResult);

end else begin

{Packing a dBASE table is much easier.}

dbResult := DbiPackTable(hDB, hCursor,'','',True);

if dbResult = DBIERR_NONE then Panel1.Caption := 'Table successfully packed'

else Panel1.Caption := 'Failure: error '+IntTostr(dbResult);

end;

finally

DbiCloseCursor(hCursor);

DbiCloseDatabase(hDB);

DbiExit;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

Tab: PChar;

begin

if FileListbox1.FileName = '' then begin

MessageDlg('No table select',mtError,[mbOK],0);

Exit;

end;

GetMem(Tab,144);

try

StrPCopy(Tab,FileListBox1.FileName);

PackTable(Sender,Tab);

finally

Dispose(tab);

end;

end;

وشكرا

#3

وقد عملت برنامج يقوم بعملية ألرص لقواعد البيانات

http://mypage.ayna.com/mohamed_madi/bk.zip

وشكرا

هذا الموضوع مغلق.

مواضيع مشابهة