PDA

View Full Version : ERROR های پیش بینی نشده در برنامه...



NR_289
دوشنبه 22 فروردین 1384, 22:45 عصر
با سلام خدمت اساتید عزیز
آیا در برنامه میشه کاری کرد تا زمانی که در هنگام اجرای برنامه خطایی (کلا هر ERROR پیش بینی نشده ای ) پیش میاد بدون دادن هیچ پیغامی به کاربر کار خاصی را انجام بده (مثلا برنامه را ببنده).

یا به طور کلی
چطوری میشه ERROR های برنامه را در جای خاصی منعکس کرد تا به آنها رسیدگی کنیم.

houshmand
سه شنبه 23 فروردین 1384, 00:54 صبح
با
try

except

end;


Exceptions are handled within try...except statements. For example,

try
X := Y/Z;
except
on EZeroDivide do HandleZeroDivide;
end;

javad_hosseiny
سه شنبه 23 فروردین 1384, 10:01 صبح
با این دستور می توان در مورد قسمتی از برنامه (دستورات) که امکان خطا پیش بینی می شود استفاده کرد
اگر بخواهیم روتینی در کل قسمتهای یک برنامه (مثلا یک برنامه بزرگ اتوماسیون) فعال باشد (on error ....) فعال باشد آیا راه حلی است (که مثلا توسط پارامتر کدخطا و یا نام عبارت خطا را به آن روتین ارسال کرد و آن روتین براساس جدول کد خطاها عکس العمل مناسب داشته باشد)

majid_afra222
سه شنبه 23 فروردین 1384, 12:00 عصر
سلام
آره امکانش هست
فقط من خیلی وقت پیش این کارو کردم (2 سال پیش) برای همین درست یادم نیست
تو فرم اصلی برنامه یه رویه ایجاد می کنی برای دریافت خطاها


procedure GetError(Sender : TObject; E : Exception);
پیاده سازیش می کنی (مثلا) :


procedure TForm1.GetError(Sender : TObject; E : Exception);
begin
ShowMessage('Error is : "' + E.Message);
end;

و در رویداد Form.Create فرم اصلی روال دسترسی به خطاها رو به این رویه ارجاع می دی :


procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := GetError;
end;

حالا تو هر فرمی که خطایی روی بده این روال اونو مدیریت می کنه
مثلا :


procedure TForm2.Button1Click(Sender: TObject);
var
j : integer;
x : string;
begin
x := 'ss';
j := strtoint(x);
end;

فقط تو Try ... Catch کار نمی کنه (چون خودش خطا رو قبل از رسیدن به برنامه مدیریت می کنه)

شرمنده بقیه اش یادم نیست :embr:
امیدوارم بدردت بخوره

vcldeveloper
چهارشنبه 24 فروردین 1384, 03:35 صبح
فقط تو Try ... Catch کار نمی کنه (چون خودش خطا رو قبل از رسیدن به برنامه مدیریت می کنه)
می تونید با استفاده از دستور raise استثناء پیش اومده رو به کنترل کننده سطح بالاتر ارسال کنید.
در ضمن دلفی try...except داره، نه try...catch
:wink:

majid_afra222
چهارشنبه 24 فروردین 1384, 08:28 صبح
سلام


در ضمن دلفی try...except داره، نه try...catch
درسته آقای کشاورز :oops: چون من چند وقتیه که .NET می نویسم

javad_hosseiny
چهارشنبه 24 فروردین 1384, 10:00 صبح
ممنون از راهنماییتان (بسیار کارم رو راه انداخت) :موفق:

NR_289
پنج شنبه 25 فروردین 1384, 09:48 صبح
با تشکر از آقای majid_afra222
:sunglass: