PDA

View Full Version : طرحریزی یک Disaster Plan برای دیتابیس های DBISAM و ...



Mojgan110
شنبه 16 دی 1385, 00:30 صبح
سلام

قبل از اینکه دیتابیس و جدولها کانکت بشوند ، میخواهم که یه سری چک صورت بگیره که مشکلی نباشه.
من این طوری به ذهنم رسید .

procedure TDataModule2.DataModuleCreate(Sender: TObject);
begin
if(DirectoryExists('D:\ODB')) then
begin
DBISAMDatabase1.Directory:='D:\ODB';
DBISAMDatabase1.Connected:= True;
if(DBISAMTable1.Exists) then
if(DBISAMTable1.VerifyTable) then
DBISAMTable1.Active:= True
else
begin
ShowMessage('Archive Table is Corrupted'+#10+'But is being Repaired');
DBISAMTable1.RepairTable(False) ;
DBISAMTable1.Active:= True;
end
else
ShowMessage('Table Does Not Exist, Trying to Restore to Previous Backups...')
end
else
ShowMessage('Database Doesnot Exist, Trying to Restore to Previous Backups...');
end;

حالا مشکلم سر VerifyTable هست که قراره خراب بودن/نبودن جدول را چک کنه.
چون وقتی عمدا جدول را خراب کردم ، روتینی که نوشته بودم کمکی به من نکرد ، بلکه سیستم مدیریت خطای_ خوده DBISAM بود که ظاهر شد و گفت که جدول مشکل داره و اینا.

پس چرا VerifyTable عمل نکرد ؟
آیا مشکل از الگوریتم من بوده ؟ ( مثلا if-else ها درست تنظیم نشده باشند و ... ) یا چیز دیگری بوده ؟

ممنون.

vcldeveloper
یک شنبه 17 دی 1385, 09:17 صبح
بلکه سیستم مدیریت خطای_ خوده DBISAM بود که ظاهر شد و گفت که جدول مشکل داره و اینا.
احتمالا در زمان فعال کردن خصوصیت Connected پیغام خطا دریافت کردید. بهتره از یک بلوک try..except استفاده کنید و کد Repair را در بخش except قرار بدید تا در صورن بروز خطا، کد Repair اجرا بشه. در غیر اینصورت با بروز خطا در هر خطی از تابع، اجرای تابع متوقف میشه و برنامه از تابع خارج میشه.
اگر DBISAM برای جدول های معیوب کلاس خاصی از Exception را raise میکنه، می تونید در بلوک except فقط همون کلاس خاص از استثنا را مدیریت کنید و سایر خطاها ر طوری دیگه ایی مدیریت کنید.