ورود

نسخه کامل مشاهده نسخه کامل : یه سوال ساده اما کاربردی از بلوک Try...Catch



H A M A S
07-08-2011, 09:40
سلام
مثلا فرض کنیم یه برنامه ساده تقسیم نوشتیم که کاربر 2 تا عدد را وارد میکنه و برنامه ما عدد اول رو بر عدد دوم تقسیم میکنه

حالا اگر کاربر بیاد عدد اول رو مثلا 8 بزاره ---عدد دوم رو 0 -- اگر از try...catch استفاده کرده باشیم خطای محاسبات ریاضی میگره

اما اگر کاربر عدد دوم که 0 هست تصحیح کنه و بزاره مثلا 2 بازم همون خطای مربوط به محاسبات رو میگیره!
مگر این که برنامه دوباره اجرا بشه!
راه حلش چیه که اگر کاربر اطلاعات غلط رو تصحیح کرد برنامه خطای قبلی رو نگیره؟؟

Mr.reCoder
07-08-2011, 10:43
منظورتون از تصحیح دوباره چیه؟ چه طوری تصحیح میکنه؟

H A M A S
07-08-2011, 16:53
منظورتون از تصحیح دوباره چیه؟ چه طوری تصحیح میکنه؟

به این واضحی بود!!

تقسیم بر صفر معنا نداره
کاربر میاد عدد دوم که مقسوم علیه هست رو صفر وارد میکنه
برنامه با استفاده از try...catch خطا میده
کاربر متوجه میشه اطلاعات رو غلط وارد کرده میاد توی فرم مقسوم علیه رو که صفر وارد کرده رو تصحیح میکنه و یه عدد غیر صفر میزاره
اما برنامه هنوز همون خطای تقسیم بر صفر رو میگیره!!
این یه مثال بود برای تفهیم مطلب!!!
مثال های دیگه:وارد کردن کلید تکراری و.....

IP007
07-08-2011, 18:47
شما کدتون رو بذارید اشکال از کد ه ...

srh124
07-08-2011, 19:02
خب عزیز بار اول که خطاگیری انجام شد برنامه از بلوک try catch خارج میشه
برای بار دوم هم روز از نو روزی از نو. چون خطایی وجود نداره درنتیجه برنامه وارد قسمت ctach نمیشه

H A M A S
07-08-2011, 20:02
شما کدتون رو بذارید اشکال از کد ه ...

من که نگفتم برنامه خرابه منظورم این بود چه طوری میشه دقیق استثناها رو رگفت و برطرف کرد اینم یه نمونه کد

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

اما اگر کاربر بیاد شماره شناسایی کاربر رو بعد از اخطار توسط برنامه تصحیح کنه بازم دستورات داخل بلوک catch اجرا میشه!!
یعنی بازم خطا میگیره!

خب عزیز بار اول که خطاگیری انجام شد برنامه از بلوک try catch خارج میشه
برای بار دوم هم روز از نو روزی از نو. چون خطایی وجود نداره درنتیجه برنامه وارد قسمت ctach نمیشه

نه اینجوری که نوشتم مدام دستورات داخل بلوک catch اجرا میشن!!

عــــلی
07-08-2011, 23:35
راه حلش چیه که اگر کاربر اطلاعات غلط رو تصحیح کرد برنامه خطای قبلی رو نگیره؟؟
سلام.
من همچین خطایی رو ندیدم....
اگه میشه یه نمونه بذارید...
هنگام اجرا شدن کدها یا خطا وجود داره یا نداره....اگه وجود داشت که خوب خطا میده....دور بعد که تصحیح شد چرا باید خطا بده؟

H A M A S
08-08-2011, 07:58
سلام.
من همچین خطایی رو ندیدم....
اگه میشه یه نمونه بذارید...
هنگام اجرا شدن کدها یا خطا وجود داره یا نداره....اگه وجود داشت که خوب خطا میده....دور بعد که تصحیح شد چرا باید خطا بده؟

آخه دوست عزیز من که نگفتم کدها خطا دارن من میگم اطلاعات وارد شده از طرف کاربر غلط و اشتباه هست-کدها هم یه نمونه گذاشتم!!
ولی این یه نمونه واقعی!!البته بازم منظورم تصحیح این کد نیست!!


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

لیدیز اند جنتلمن!!

اگر کاربر بیاد کد راننده رو توی فرم موقع ثبت نام تکراری بزنه برنامه خطا میگیره و به کاربر شیر فهم میکنه باید کد راننده رو عوض کنی و یه کد غیر تکراری بدی!!!
کاربر هم میاد یه کد غیر تکراری میده!!!اما برنامه که هنوز توی بلوک catch مونده پیغام میده کد راننده تکراری هست!!
باید یه جوری از بلوک catch بعد از خطا گیری اول بیاد اول try

عــــلی
08-08-2011, 12:36
حالا اگر کاربر بیاد عدد اول رو مثلا 8 بزاره ---عدد دوم رو 0 -- اگر از try...catch استفاده کرده باشیم خطای محاسبات ریاضی میگره

اما اگر کاربر عدد دوم که 0 هست تصحیح کنه و بزاره مثلا 2 بازم همون خطای مربوط به محاسبات رو میگیره!
مگر این که برنامه دوباره اجرا بشه!

اما اگر کاربر بیاد شماره شناسایی کاربر رو بعد از اخطار توسط برنامه تصحیح کنه بازم دستورات داخل بلوک catch اجرا میشه!!

اگر کاربر بیاد کد راننده رو توی فرم موقع ثبت نام تکراری بزنه برنامه خطا میگیره و به کاربر شیر فهم میکنه باید کد راننده رو عوض کنی و یه کد غیر تکراری بدی!!!

سلام دوست عزیز...
برای سریعتر به جواب رسیدن بهتره تمام تلاشتون رو انجام بدین که مفهوم رو به بهترین شکل برسونین...
شما خودتون یه نگاه به چیزایی که گفتین بندازین ببینید درک کدومش راحت تره؟:31:
-----------
من توی کدی که شما دادین مشکلی نمیبینم....
تاحالا ندیدم که توی catch بمونه....بعد از بسته شدن MessageBox متد کاملاً بسته میشه.
از try باید در مواردی استفاده کنید که نمیدونید که چه خطایی احتمال داره به وجود بیاد.
ولی اگه میدونید و میتونید پیشگیری کنید بهتره همون کار رو انجام بدید به نظرم در این موارد استفاده از try راه مناسبی نیست.و جلوی سرعت محاسبات رو میگیره.

H A M A S
08-08-2011, 12:49
سلام دوست عزیز...
برای سریعتر به جواب رسیدن بهتره تمام تلاشتون رو انجام بدین که مفهوم رو به بهترین شکل برسونین...
شما خودتون یه نگاه به چیزایی که گفتین بندازین ببینید درک کدومش راحت تره؟:31:
-----------
من توی کدی که شما دادین مشکلی نمیبینم....
تاحالا ندیدم که توی catch بمونه....بعد از بسته شدن MessageBox متد کاملاً بسته میشه.
از try باید در مواردی استفاده کنید که نمیدونید که چه خطایی احتمال داره به وجود بیاد.
ولی اگه میدونید و میتونید پیشگیری کنید بهتره همون کار رو انجام بدید به نظرم در این موارد استفاده از try راه مناسبی نیست.و جلوی سرعت محاسبات رو میگیره.

خب این شد یه چیزی!!:31:
خواستم با بیان مثال بگم که درکش راحتر بشه اما مثل این که بدتر شد!!
بعد از اوکی کردن مسیج باکس در هر صورت بازم خطا میگیره!!شما خودت امتحان کن!!البته به این صورتی که من نوشتم!
================================================== ===========
خب پیشنهاد شما چیه برای رفع خطاهایی که احتمالشون رو میدیم؟؟
چون اونهایی که پیش بینی نشده رو به قول شما با catch میگیریم!!

عــــلی
08-08-2011, 13:11
آخه کدی که دادی کامل نیست و من نمیتونم تست کنم...
اگه میشه یه نمونه کامل و ساده بگید.دی


خب پیشنهاد شما چیه برای رفع خطاهایی که احتمالشون رو میدیم؟؟
برای مثال برای چک کردن اینکه یک فیلد در دیتابیس تکراریه باید از خود دیتابیس مثلاً Sql استفاده کنید بدین صورت که یک متد bool ساخته و سپس با متد با Sql ارتباط برقرار کرده و اطلاعات رو چک میکنید و با شرط میگید از مقدار بازگشتی true بود پیغام بده که همچین فیلدی وجود داره.

H A M A S
08-08-2011, 14:07
سلام
از توجه تون ممنون!!
این مشکل اساسی منه امیدوارم بتونی حلش کنی!!
البته اگر لطف کنی!!
==========================================
1-اول یه دیتابیس با sql server درست کن با نام تست 2
2-یه جدول با نام پیشفرض(Table_1) درست کن با این مشخصات:


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


3-حالا این برنامه رو بی زحمت دانلود کنید!(با 2010 نوشتم)
حجم:151 کیلوبایت


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توی فرم اول کلیک کنید
فرم 2 که باز شد جای id رو کلید تکراری بزنید
خطا که داد
اینبار یه کد غیر تکراری بزنید!
حالا متوجه شدید؟؟

عــــلی
08-08-2011, 14:39
:31:
ای کاش زود تر اینکارو میکردی که اینقدر معطل نشید....
این قسمت کد شما:

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

ابتدا به جدول یک فیلد در حافظه اضافه میکند...
وبعد از خطا آن فیلد از جدول پاک نمیشود و مجدداً آن خطا تکرار میشود..
کد زیر را به صورت زیر تغییر دهید:

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

موفق و پیروز باشید در پناه حق.

H A M A S
08-08-2011, 15:51
خیلی متشکر!!
ببخشید ولی حالا که چم و خم کار ور فهمیدید یه سوال دیگه هم داشتم.
فرض کنید کاربر میاد توی فرم یک ---روی یکی از سطرهای گرید دابل کلیک میکنه-محتویات گرید (id-name ) توی تکست باکس های مربوط توی فرم 2 نشون داده میشن!!
تا اینجای کار هیچ مشکلی نیست!!
بعد میاد اسم رو تغییر میده!
و ویرایش میکنه و فرم 2 بسته میشه
اما تغییرات به صورت آنی توی دیتاگرید فرم 1 نمایش داده نمیشه
من این کد رو بعد از ویرایش شدن اطلاعات نوشتم اما جواب نداد

Dim rs = From p In db.Table_1s
form1. DataGridView1.DataSource = rs
متشکر!

عــــلی
08-08-2011, 16:44
از این کد استفاده کن:
DataGridView1.DataSource=null
DataGridView1.DataSource=rs
اگه جواب نداد بدون که اصلاعات ویرایش نشدن یا اگه شدن توی جدول set نشدن.