ايران ويج

نسخه‌ی کامل: دوتا سوال در مورد ERROR
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
[color]1[/color]
اين امكان وجود داره ، به جاي استفاده از on error resume next در تك تك توابع يك بار از اون استفاده كنيم و در تمام برنامه جواب بده
چون فرض كنيد برنامه اي با 500 تابع وجود داره و مي خواييم از on error استفاده كنيم
چون مي خوام اين دستور در بعضي مواقع كار نكنه

2
ميشه اطلاع از تابع در حال اجرا به دست آورد ، در واقع مي خوام بعد از اجراي برنامه ( در زمان اجرا ) بدونم ، خطا در كدوم تابع و با چه شماره اي رخ داده

ممنون ميشم اگر دوستاني كه اطلاع در باره اين موضوع دارن راهنمائي كنند
دوستان اكتيوكس و يا dll سراغ نداريد براي اين كار ؟!!؟
يا قطعه كد با زبوناي ديگه ؟
با Hook کردن پیغامها(خطا) می شه یه کارایی کرد

یعنی پیغام رو می گیری،بعد بر اساس اون کار لازم برای رفع خطا رو انجام می دی

ولی On Error Resume Next ساختار دیگه ای داره یعنی خطا رو قبل از نمایش رد می کنه ولی با روش بالا بعد از نمایش خطا ما

اونو پردازش می کنیم

توی ویبی رو دقیقا نمی دونم ولی پاوربیسیک قابلیت Runtime Debug کلی برنامه رو داره
ممنون
راستي قضيه اين پاور بيسيك چيه !؟
خيلي وقته مي خوام ازش اطلاع كسب كنم
کلاً استفاده از on error resume next درست نيست اين دستور فقط مشگلات برنامه رو پنهان ميکنه
اما برای اينکه متوجه بشيد برنامه توی کدوم قسمت مشگل داره و خطا ميده بايد از اين تابع استفاده کنيد:

اين رو بايد تو هر تابع که ميخوای از وقوع خطا با خبر بشی بزاری
کد:
On Error GoTo A:
'=============
'code
'=============
Exit Sub
A:

'peygham dar soorat khataye barbname
MsgBox "khata shomare1", vbInformation


توی همه توابع هميشه امکان بروز خطا وجود نداره پس لازم نيست همه جا استفاده کنی فقط توی جاه هايی که فکر ميکنی امکان وقوع خطا هست استفاده کن
ولی سوال چیزه دیگه ایه

مشکل ایشون اینه که نمی خوان در هر تابعی که لازمه از دستورات مدیریت خطا استفاده کنن بلکه

می خوان یه کاری کنن که مدیریت خطا در کل برنامه و بدون وابستگی به تک تک توابع صورت بگیرد

نقل قول: راستي قضيه اين پاور بيسيك چيه !؟

Whistle
اگه C++ حالیت میشه اینو سرچ کن : wh_debug hook
متاسفانه از اون هوک هایی که تو وی بی نمیشه ازش استفاده کرد. یه مدت بدجوری کارم گیرش بود.
البته بیشتر برای کنترل قلاب ها و زنجیر هوک بکار میره. ولی میشه برای کنترل خطاها هم ازش استفاده کرد . . .
هدف کلی مديريت خطاها بود
اگه بخوان هر خطا رو مشخص کنن که برای چی اتفاق افتاده با هر روشی کار کنن بايد برای هر خطا توضيح بنويسن پس اين هم کد نويسی رو زياد ميکنه
جای ايراد گرفتن هم اگر روشی بهتر تو VB بلدين بزاريد ما هم استفاده کنيم
دوست عزیز

رد کردن خطا به هیچ وجه مدیریت خطا محسوب نمی شه، بلکه تنها کنترل برنامه رو از دست نمی دید و می تونید

ائون رو به هر شکل ممکن به جلو پیش ببرید که فقط در موارد خیلی خاص استفاده از اون منطقی هست نه کل برنامه!!

برای مدیریت خطا باید از دستور

On Error Goto {LineNo}'d

استفاده کنید. به این شکل که در بالای هر سطری که احتمال بروز حطا داره یه متغیر به نام مثلاErNo قرار بدید و

به اون شماره بدید مثلا شماره ای شامل نام تابع و شماره خط.

بعد از بروز خطای احتمالی و انتقال کنترل برنامه به {LineNo} با یه دستور Select Case ErNo شماره خطا رو بررسی

و پیغام مناسب و یا حتی عمل مناسب برای بر طرف کردن خطا رو ارائه بدید.

در پروژه هایی که حجم کار زیاده می تونید یه برنامه ساده برای خوندن فایل های Frm بنویسید که جای توابع رو تشخیص

بده، در ابتدای تابع دستور OnError رو قرار بده، بالای تمام سطرها متغییر ErNo رو به ترتیب شماره دهی کنه و در نهاست دستور Select Case رو به انتهای تابع اضافه کنه یا حتی یه تابع مخصوص ارجاعات خطاها در برنامه تعبیه کنید.

در هر صورت مدئیریت خطا یعنی این نه رد کردنش!!Wink
خوب اين چه فرقی داشت؟
کد php:
Private Sub Command1_Click()
    
Dim strCode As String
    Dim i       
As String
    i 
1
    
'initialize strcode
    Do While (True)
        i = InStr(i, strCode, " Function ")
        If i = 0 Then Exit Do
        i = InStr(i, strCode, ")")
        strCode = Mid(strCode, 1, i) & vbCrLf & "on error resume next" & vbCrLf & Mid(strCode, i + 1)
    Loop
    i = 1
    Do While (True)
        i = InStr(i, strCode, " Sub ")
        If i = 0 Then Exit Do
        i = InStr(i, strCode, ")")
        strCode = Mid(strCode, 1, i) & vbCrLf & "on error resume next" & vbCrLf & Mid(strCode, i + 1)
    Loop
End Sub 
کسی dll برای wh_debug سراغ داره(وی بی) ؟
صفحه‌ها: 1 2