View Full Version : کنترل خطاها
seyed_27
دوشنبه 29 تیر 1388, 00:04 صبح
من قبلا با وبی کار میکردم برای منترل خطاها مثلا اینطوری بود که اگر خطای شماره 33 رخ داد فلان پیام رو بده
تو دلفی نمیدونم چطوری میشه با شماره خطاها کار کرد یه نمونه برنامه بگذارید
راستی من تو فرم اصلی برنامه ام از یه اکتیوایکس استفاده کردم میخوام قبل از show کردن این فرم و در زمان اجرای برنامه اگر برنامه با مشکل مواجه شد به دلیل نبودن این اکتیوایکس قبلش پیام بده- این کار تو وبی خیلی راحته در اجرای برنامه بجای اینکه اول فرم اصلی اجرا بشه یه ماژول اجرا میکنیم و در اون یه کنترل خطا میگذاریم و فرم اصلی رو show میکنیم اگر خطا داد برنامه دیگه خارج نمیشه سریع اون پیام ظاهر میشه
با تشکر
p_ooya
دوشنبه 29 تیر 1388, 09:20 صبح
به صورت کلی :
try
your code;
except
on e:Exception do
begin
if e.ErrorCode = 1045 then MessageBox(Handle,'.äÇã ˜ÇÑÈÑí íÇ ˜áãå ÚÈæÑ Çæá ÇÔÊÈÇå ÇÓÊ','!ÎØÇ',MB_OK+MB_ICONERROR);
if e.ErrorCode = 2003 then MessageBox(Handle,'.ÂÏÑÓ íÇ äÇã ÓÑæÑ Çæá ÇÔÊÈÇå ÇÓÊ','!ÎØÇ',MB_OK+MB_ICONERROR);
if e.ErrorCode = 1049 then MessageBox(Handle,'.äÇã ÈÇä˜ ÇØáÇÚÇÊí Çæá ÇÔÊÈÇå ÇÓÊ','!ÎØÇ',MB_OK+MB_ICONERROR);
if e.ErrorCode = 2013 then MessageBox(Handle,'.ÊáÇÔ ÈÑÇí ÇÑÊÈÇØ ÈÇ ÓÑæÑ Çæá ÈíÔ ÇÒ ÍÏ ãÞÑÑ Èå Øæá ÇäÌÇãíÏ','!ÎØÇ',MB_OK+MB_ICONERROR);
end;
end;
اگر می دونید که چه استثنایی قراره اتفاق بیفته :
except
// IO error
On E : EInOutError do
ShowMessage('IO error : '+E.Message);
// Dibision by zero
On E : EDivByZero do
ShowMessage('Div by zero error : '+E.Message);
// Catch other errors
else
ShowMessage('Unknown error');
end;
سعید صابری
دوشنبه 29 تیر 1388, 20:26 عصر
سلام دوست عزيز
نميدونم چرا كامپايلر E.ErrorCode از كد errorcode خطا مي گيره ميگه اين تابع جزء E نمي باشد ميشه بيشتر راهنمايي كنيد.
ممنون
V60
دوشنبه 29 تیر 1388, 21:20 عصر
سلام
من هم دنبال نحوه پیدا کردن کد خطا هستم
این errorcode که شما معرفی کردید برای من هم وجود ندارد و کمپایلر نمی شناسه
p_ooya
دوشنبه 29 تیر 1388, 22:01 عصر
واقعا شرمنده. من این قطعه رو از کدی که خودم تو برنامه ام داشتم کپی کردم و مربوط به یه کلاس خاصه. فکر با کد زیر مشکل نداشته باشید :
try
your code
except
on E : Exception do
begin
if e.ClassName='EDivByZero' then showmessage('ads');
if e.ClassName='EIntOverflow' then showmessage('ads');
if e.ClassName='EDateTimeError' then showmessage('ads');
.
.
end;
end;
لیست استثناها هم که تو اینترنت راحت پیدا میشه. اگر خواستید ببینید اسم کلاس استثنا مورد نظرتون اسمش چیه از کد زیر استفاده کنید:
try
your code
except
on E : Exception do
ShowMessage('Exception class name = '+E.ClassName);
end;
باز هم بابت اشتباه پیش آمده در پست دوم تاپیک ببخشید.
سعید صابری
سه شنبه 30 تیر 1388, 07:42 صبح
ممنون دوست عزيز
آيا راهي است كه شماره خطا(كد خطا) را بدست بياريم مانند هم پست دو البته كدي كه جواب بده.
p_ooya
سه شنبه 30 تیر 1388, 09:32 صبح
ممنون دوست عزيز
آيا راهي است كه شماره خطا(كد خطا) را بدست بياريم مانند هم پست دو البته كدي كه جواب بده.
تا اونجایی که سواد ناقص من قد میده فکر نمی کنم (امروز 3 تا پست اشتباه داشتم برای همین رو حرفهای من خیلی حساب نکنید :گیج: ). من تو help دلفی 7 که نگاه کردم، کلاس exception متد یا خاصیتی برای بدست آوردن کد خطا نداره. من تو کدی که توی پست دوم نوشتم استثناهای کامپوننت mydac (برای اتصال به بانک mysql) رو هندل کردم. این errorcode هم مربوط به همون کلاسه و تا اونجایی که من می دونم با کلاس استاندارد دلفی نمیشه با کد خطا کار کرد. اساتید بهتر می دونند. این هم لیست تعدادی از استثناهای مهم :
Exception Base class
EAbort Abort without dialog
EAbstractError Abstract method error
AssertionFailed Assert call failed
EBitsError Boolean array error
ECommonCalendarError Calendar calc error
EDateTimeError DateTime calc error
EMonthCalError Month calc error
EConversionError Raised by Convert
EConvertError Object convert error
EDatabaseError Database error
EExternal Hardware/Windows error
EAccessViolation Access violation
EControlC User abort occured
EExternalException Other Internal error
EIntError Integer calc error
EDivByZero Integer Divide by zero
EIntOverflow Integer overflow
ERangeError Out of value range
EMathError Floating point error
EInvalidArgument Bad argument value
EInvalidOp Inappropriate operation
EOverflow Value too large
EUnderflow Value too small
EZeroDivide Floating Divide by zero
EStackOverflow Severe Delphi problem
EHeapException Dynamic memory problem
EInvalidPointer Bad memory pointer
EOutOfMemory Cannot allocate memory
EInOutError IO error
EInvalidCast Object casting error
EInvalidOperation Bad component op
EMenuError Menu item error
EOSError Operating system error
EParserError Parsing error
EPrinter Printer error
EPropertyError Class property error#
EPropReadOnly Invalid property access
EPropWriteOnly Invalid property access
EThread Thread error
EVariantError Variant problem
منبع (http://www.delphibasics.co.uk/Article.asp?Name=Exceptions)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.