PDA

View Full Version : یه error که موقع استفاده ازcase پیش میاد



Tarrah
سه شنبه 15 شهریور 1384, 12:34 عصر
سلام
آوردم یه case استفاده کردم تو برنامه error می گیره که
access violation at address 00000000.read of address 00000000.
مشکل از کجاست؟
case هم اینجوری هست.


case randomtable of
1:tblSoalat.Locate('SoalId',1,[]);
2:tblSoalat.Locate('SoalId',31,[]);
3:tblSoalat.Locate('SoalId',61,[]);
4:tblSoalat.Locate('SoalId',91,[]);
5:tblSoalat.Locate('SoalId',121,[]);
6:tblSoalat.Locate('SoalId',151,[]);
7:tblSoalat.Locate('SoalId',181,[]);
8:tblSoalat.Locate('SoalId',211,[]);
9:tblSoalat.Locate('SoalId',241,[]);
10:tblSoalat.Locate('SoalId',271,[]);
end;

Naficy
سه شنبه 15 شهریور 1384, 15:36 عصر
وقتی خطای access violation می گیرید، معمولا یه جای دیگه ی برنامه تون خرابه و یه جای دیگه این خطا رو می گیرید. (یعنی محلی که خطا داده می شود بعضا ربطی به خود خطا ندارد) و این کار اشکال زدایی را سخت می کنه.

ضمن این که من متوجه ایرادی در کدتون نشدم. یک احتمال ضعیف اینه که مثلا شی tblSoalat اصلا ایجاد نشده باشه و nil باشه. اما همانطور که گفتم، هیچی معلوم نیست...

Tarrah
سه شنبه 15 شهریور 1384, 18:39 عصر
tblsoalat مشکلی نداره . هیچ راهی برا تشخیص خطا نیست ؟

Delphi Skyline
سه شنبه 15 شهریور 1384, 21:50 عصر
درسته . اما مشکل از کیس نیست . کل کد بزار تا بهت بگم .

Naficy
پنج شنبه 17 شهریور 1384, 13:41 عصر
در مورد خطای access violation، اگر دقیقا راه ایجاد خطا رو می دونید و می تونید دوباره اونو ایجاد کنید، (مثلا می دونید که بعد از زدن فلان دکمه خطا ایجاد می شه) یک راه نسبی هست:
برنامه رو اجرا کنید. در اولین خطی که بعد از زدن آن دکمه اجرا می شود یک "نقطه شکست" یا BreakPoint بذارید. سپس برنامه رو خط به خط اجرا کنید. سر هر خطی که error داد، باید روی کلیه مقادیر متغیرهای بکار رفته در آن و خصوصیات اشیا مرتبط با آن خط و... تمرکز کنید تا خطا را بیابید.
البته معمولا مفیدتره که خودتان یکبار کل برنامه رو چک کنید و ببینید کجاهاش احتمالا ایراد داره.