نقل قول: Try - Cache در VB6
نقل قول:
آیا کسی میدونه که چطور میشه در VB6 مثل C# از قابلیت Try-Cache بهره برد؟!
در VB شما باید با دستور on error این کا رو انجام بدید مثلا:
On Error Goto labelname
نقل قول:
آیا vb6 این قابلیت رو داره؟اگه نداره میشه با کد نویسی ایجادش کرد؟
با کد نویسی باید این قابلیت رو ایجاد کنید.
نقل قول:
آیا vb.net این قابلیت رو داره؟!
بله vb.net این قابلیت رو داره
نقل قول:
طریقه کارش به چه صورت هست،یعنی اگه تغییراتی در بانک ایجاد بشه و بعد مشکلی پیش بیاد آیا اثر اون تغییرات از بین میره؟!
نمیدونم:لبخند:
البته این رو هم اظافه کنم :
نحوه استفاده Try...Catch در vb.net :
نقل قول:
Try
کدی که شک دارید امکان ایجاد خطا داشته باشه
Catch
کدی که در صورت خطا اجرا میشود
Finally
کدی که می خواهید بعد از دستورات Catch اجرا شود (اختیاریست)
End Try
البته اکثر برنامه نویس های VB (مثل خودم) سعی میکنند خودشون رو به زحمت نندازند و از کد دوست داشتنی زیر استفاده کنند:
On Error Resume Next
نقل قول: Try - Cache در VB6
یعنی try-cache به این صورت نیست که اگر دستورات try کامل انجام نشد بصورت خودکار تمامی اثرات دستورات اجرا شده رو از بین ببره؟!در این صورت چه فرقی با on error داره؟!
نقل قول: Try - Cache در VB6
نقل قول:
نوشته شده توسط
milad-fa
یعنی try-cache به این صورت نیست که اگر دستورات try کامل انجام نشد بصورت خودکار تمامی اثرات دستورات اجرا شده رو از بین ببره؟!در این صورت چه فرقی با on error داره؟!
اگه میخواین در صورتی که دستورات try کامل انجام نشد پس اعمال نشه میتونید از Try-Catch تو در تو استفاده کنید به این صورت:
نقل قول:
Try
کدی که شک دارید امکان ایجاد خطا داشته باشه
Catch
کدی که در صورت خطا اجرا میشود
Try
کدی که باعث شود تغییرات اعمال نشود(به عبارتی الگوریتم به عقب برگرده)
Catch
هر کدی که نیز باشه رو مینویسیم
End Try
End Try
البته شاید این راه اصولی نباشه...
من که تفاوتی در Try-catch و on error ندیدیم ولی دلیل ایجاد این ساختار شاید منسوخ شدن دستور GOTO در برنامه نویسی مدرن باشه!
نقل قول: Try - Cache در VB6
من تصور میکردم دستوراتی که در try اجرا میشه اگر به هر دلیلی به پایان نرسه تمامی دستوراتی که اجرا شدن بصورت خودکار و بدون هیچ کدنویسی اثراتشون از بین میره(به عقب برمیگرده) و در قسمت cache میشه مثلاً یه msgbox گذاشت که 'تراکنش مورد نظر با موفقیت صورت نگرفت'.
یعنی اینطور نیست و برای به عقب برگشتن تو net. هم باید کد نوشت؟!:ناراحت:
نقل قول: Try - Cache در VB6
نقل قول:
نوشته شده توسط
milad-fa
من تصور میکردم دستوراتی که در try اجرا میشه اگر به هر دلیلی به پایان نرسه تمامی دستوراتی که اجرا شدن بصورت خودکار و بدون هیچ کدنویسی اثراتشون از بین میره(به عقب برمیگرده) و در قسمت cache میشه مثلاً یه msgbox گذاشت که 'تراکنش مورد نظر با موفقیت صورت نگرفت'.
یعنی اینطور نیست و برای به عقب برگشتن تو net. هم باید کد نوشت؟!:ناراحت:
شاید هم اینجوری که شما گفتید باشه دقیقا مطمئن نیستم حالا شما اگه میخوای تست کن تا هم شما و هم من مطمئن(فکر کنم غلط املایی دارم:لبخند:) شیم...
نقل قول: Try - Cache در VB6
نقل قول:
نوشته شده توسط
ms2222
شاید هم اینجوری که شما گفتید باشه دقیقا مطمئن نیستم حالا شما اگه میخوای تست کن تا هم شما و هم من مطمئن(فکر کنم غلط املایی دارم:لبخند:) شیم...
من net. رو سیستمم فعلاً نصب نیست.
اگر برات مقدوره یه تست کن.
دوستان دیگه اگر اطلاعاتی در این زمینه دارن لطفاً راهنمایی کنید.
نقل قول: Try - Cache در VB6
نقل قول:
نوشته شده توسط
milad-fa
من net. رو سیستمم فعلاً نصب نیست.
اگر برات مقدوره یه تست کن.
دوستان دیگه اگر اطلاعاتی در این زمینه دارن لطفاً راهنمایی کنید.
:لبخند: .net تو win7 نصب کردم الان هم تو Xp هستم ، برای همین به شما گفتم ولی مشکلی نیست یه چند لحظه وایسین بهتون خبر میدم...
البته من هم از دوستانی که اطلاعاتی دارند ممنون میشم به ما کمک کنند.
خوب من تست کردم حدس شما درست بود نگاه کنید من از این کد ها استفاده کردم :
PublicClass Form1
Dim a AsInteger
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
a = a + 100000000000
Catch ex As Exception
MsgBox(a)
EndTry
EndSub
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
a = 900000000
EndSub
EndClass
جوابی که به من داد همون :900000000 بود.
(در ضمن اررور درست کردن هم واقعا کار سختیه:قهقهه:
نقل قول: Try - Cache در VB6
نه دوست عزیز شما باید دستور زیر رو تست کنید:
PublicClass Form1
Dim a AsInteger
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
a=a+1
a = a + 100000000000
Catch ex As Exception
MsgBox(a)
EndTry
EndSub
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
a = 900000000
EndSub
EndClass
نقل قول: Try - Cache در VB6
خوب پس حالا حدس من درست از آب در اومد:بامزه: جواب شد :
900000001
ولی خوب با این وجود چه تفاوتی با On Error داره؟
نقل قول: Try - Catch در VB6
سلام،
عنوان تاپیک اصلاح شد. (Catch صحیح هست!)
اینکه در تالار VB6 دنبال کاربرد Try-Catch باشید یه خورده عجیب هست!
نقل قول:
ولی خوب با این وجود چه تفاوتی با On Error داره؟
On Error یک ساختار ساده و قدیمی و منسوخ شده برای هندل کردن خطاهای احتمالی برنامه هست. Try-Catch قدرتمند تر عمل میکنه و انعطاف پذیری بیشتری نسبت به On Error داره. به علاوه اینکه از ساختار مناسبی برخوردار هست. بر خلاف On Error Goto که ساختار منسوخ شده محسوب میشه.
توی On Error ما خطا رو با توجه شمارش هندل میکنیم (Err.Number) اما تو NET. ، بر حسب نوع Exception رخ داده، خطا رو شناسایی می کنیم.
چون Try-Catch ساختار بلاکی داره خوانایی بیشتری داره و استفاده ازش هم راحتر هست. علاوه بر بلاک های Try و Catch یک بلاک Finally هم هست که باعث میشه دستورات داخل بلاک Finally در هر شرایطی اجرا بشن. (چه خطایی رخ بده و چه خطایی رخ نده)
برای اطلاعات بیشتر در مورد Try-Catch در بخش NET. جستجو کنید.