ভিবিএস স্ক্রিপ্ট - ত্রুটি পরিচালনার ব্যবহার


86

আমি ত্রুটিগুলি ধরতে এবং সেগুলিতে লগ করার জন্য ভিবিএস স্ক্রিপ্টটি ব্যবহার করতে চাই (যেমন ত্রুটিতে "কিছু লগ করুন") তারপরে স্ক্রিপ্টের পরবর্তী লাইনটি আবার শুরু করুন।

উদাহরণ স্বরূপ,

ত্রুটি পুনরায় শুরু করার পরে
'পদক্ষেপ 1
'পদক্ষেপ 2
'পদক্ষেপ 3

পদক্ষেপ 1 এ যখন ত্রুটি দেখা দেয়, তখন আমি এটিকে ত্রুটিটি লগ করতে চাই (বা এটির সাথে অন্যান্য কাস্টম ফাংশনগুলি সম্পাদন করি) তারপর পদক্ষেপ 2 এ আবার শুরু করুন this এটি কি সম্ভব? এবং আমি কীভাবে এটি বাস্তবায়ন করতে পারি?

সম্পাদনা: আমি কি এরকম কিছু করতে পারি?

ত্রুটি পুনরায় চালু করার সময় আমারআরআরচ্যাচ
'পদক্ষেপ 1
'পদক্ষেপ 2
'পদক্ষেপ 3

myErrCatch:
'লগ ত্রুটি
পুনরায় শুরু করুন

4
ডিলানের প্রতিক্রিয়া ততোধিক ত্রুটি পরিচালনার বিভাগে ভিবি যেমন পাওয়া যায় ততই ভাল। এই কারণেই আমি যখন জাভাস্ক্রিপ্টটি ব্যবহার করতে পেতাম তখনই আমি সর্বদা এটি ব্যবহার করতাম।
ডাব্লুএমসি

উত্তর:


163

ভিবিএস স্ক্রিপ্টের ছোঁড়া বা ধরা ব্যতিক্রমী ধারণার কোনও ধারণা নেই, তবে রানটাইমটি একটি বিশ্বব্যাপী এরর অবজেক্ট সরবরাহ করে যা শেষ সঞ্চালনের ফলাফলগুলি ধারণ করে। প্রতিটি ক্রিয়াকলাপের পরে আপনার স্পষ্টতই পরীক্ষা করতে হবে যে এরার নাম্বার সম্পত্তিটি শূন্য নয়।

On Error Resume Next

DoStep1

If Err.Number <> 0 Then
  WScript.Echo "Error in DoStep1: " & Err.Description
  Err.Clear
End If

DoStep2

If Err.Number <> 0 Then
  WScript.Echo "Error in DoStop2:" & Err.Description
  Err.Clear
End If

'If you no longer want to continue following an error after that block's completed,
'call this.
On Error Goto 0

"অন ত্রুটি গোটো [লেবেল]" সিনট্যাক্সটি ভিজ্যুয়াল বেসিক এবং ভিজ্যুয়াল বেসিক ফর অ্যাপ্লিকেশনগুলির (ভিবিএ) দ্বারা সমর্থিত, তবে ভিবিএস স্ক্রিপ্ট এই ভাষা বৈশিষ্ট্যটিকে সমর্থন করে না যাতে আপনাকে উপরে বর্ণিত হিসাবে ত্রুটি পুনরায় শুরু করার জন্য পরবর্তীটি ব্যবহার করতে হবে।


4
আপনি ডাব্লুএসক্রিপ্ট পরিবর্তন করতে পারেন। যদি কোনও ফাংশন বা সাব কল করতে বিবৃতিটির মধ্যে প্রতিবেদন করুন যা
ফলস্বরূপ

"শেষ করা অপারেশনটির পুনরায় সংযুক্তি রয়েছে" " এটা কি সত্যি? দেখে মনে হচ্ছে এটি শেষ ত্রুটিটি পেয়েছে যা একটি বড় পার্থক্য।
ড্যামিয়েন গোল্ডিং

এমএসের ডকুমেন্টেশন সত্ত্বেও err.clearপরের চেকটি ট্রিপিংয়ের পূর্ববর্তী ত্রুটিগুলি রোধ করতে (যেমন, টেকনেট.মাইক্রোসফটকম / লিবেরি / আই 692852.aspx ) আমার অভিজ্ঞতা errসাফ হয়ে গেছে " নিজেই "স্ক্রিপ্টের অগ্রগতি হিসাবে। আরও পরীক্ষা না করেই, আমার অনুমানগুলি errতাদের অভ্যন্তরীণ ক্রিয়াকলাপগুলির পণ্য হিসাবে অবজেক্ট ক্লিয়ারগুলি ব্যবহার করে izing
ব্যবহারকারী 66001

@ ব্যবহারকারী 66001 সম্মত হয়েছে তবে স্পষ্টভাবে কল করা আরও নিরাপদ Err.Clear
ব্যবহারকারী 69292942

12

নোট যে On Error Resume Nextবিশ্বব্যাপী সেট করা হয় না। আপনি আপনার কোডের অনিরাপদ অংশটি উদাহরণস্বরূপ কোনও ফাংশনে রাখতে পারেন যা ত্রুটি দেখা দিলে সঙ্গে সঙ্গে বাধা হয়ে দাঁড়ায় এবং পূর্ববর্তী OERNবিবৃতি সম্বলিত সাব থেকে এই ফাংশনটি কল করুন ।

ErrCatch()

Sub ErrCatch()
    Dim Res, CurrentStep

    On Error Resume Next

    Res = UnSafeCode(20, CurrentStep)
    MsgBox "ErrStep " & CurrentStep & vbCrLf & Err.Description

End Sub

Function UnSafeCode(Arg, ErrStep)

    ErrStep = 1
    UnSafeCode = 1 / (Arg - 10)

    ErrStep = 2
    UnSafeCode = 1 / (Arg - 20)

    ErrStep = 3
    UnSafeCode = 1 / (Arg - 30)

    ErrStep = 0
End Function

4
আমি এর আগে সবচেয়ে সুস্পষ্ট উদাহরণ নয় তবে ধারণাটি পেয়েছি।
ব্যবহারকারী 69292942

7
@ ল্যানকিমার্ট আপনি কীভাবে আরও স্পষ্ট উদাহরণের সাথে লিঙ্ক করতে চাইবেন যা আপনি তখন দেখেছেন বা পরিবর্তে পরামর্শ দিচ্ছেন যে ওমেগাস্ট্রিপস কীভাবে এই উদাহরণটিকে উন্নত করতে পারে?
ডোমিনিক

4
এক সেকেন্ডের জন্য, আমি এই ধারণাটি পেয়েছি যে আমি "ওমেগাস্ট্রিপস" লওল নামে একটি নতুন সফটওয়্যার ইঞ্জিনিয়ারিং উপমা মিস করেছি
TheBlastOne

4

আপনি আপনার পদক্ষেপ ফাংশন কলগুলিকে একটি মুখোমুখি ফাংশনে পুনরায় গোষ্ঠীভুক্ত করতে পারেন:

sub facade()
    call step1()
    call step2()
    call step3()
    call step4()
    call step5()
end sub

তারপরে, আপনার ত্রুটিটি পরিচালনা করতে কোনও উচ্চতর ফাংশনে থাকতে হবে যা মুখোমুখি কল করে:

sub main()
    On error resume next

    call facade()

    If Err.Number <> 0 Then
        ' MsgBox or whatever. You may want to display or log your error there
        msgbox Err.Description
        Err.Clear
    End If

    On Error Goto 0
end sub

এখন, ধরুন step3()একটি ত্রুটি উত্থাপিত হয়। যেহেতু facade()ত্রুটি (নেই হ্যান্ডেল নেই কোন On error resume next মধ্যে facade()), ত্রুটি ফেরত পাঠানো হবে main()এবং step4()এবং step5()মৃত্যুদন্ড কার্যকর করা হবে না।

আপনার ত্রুটি পরিচালনা পরিচালনা এখন 1 কোড ব্লকে রিফ্যাক্টর


1

আমি ভিবিএস স্ক্রিপ্টে ব্যতিক্রমীভাবে নতুন, সুতরাং এটি সর্বোত্তম অনুশীলন হিসাবে বিবেচিত হবে না বা এমন কোনও কারণ থাকতে পারে যা আমি এখনও অবগত নই তবে এটিই সমাধান যা আমি ছাঁটাই করতে এসেছি is আমার প্রধান কোড ব্লকে ত্রুটি লগিং কোডের পরিমাণ নিচে।

Dim oConn, connStr
Set oConn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=SQLOLEDB;Server=XX;UID=XX;PWD=XX;Databse=XX"

ON ERROR RESUME NEXT

oConn.Open connStr
If err.Number <> 0 Then : showError() : End If


Sub ShowError()

    'You could write the error details to the console...
    errDetail = "<script>" & _
    "console.log('Description: " & err.Description & "');" & _
    "console.log('Error number: " & err.Number & "');" & _
    "console.log('Error source: " & err.Source & "');" & _
    "</script>"

    Response.Write(errDetail)       

    '...you could display the error info directly in the page...
    Response.Write("Error Description: " & err.Description)
    Response.Write("Error Source: " & err.Source)
    Response.Write("Error Number: " & err.Number)

    '...or you could execute additional code when an error is thrown...
    'Insert error handling code here

    err.clear
End Sub

4
এটি এএসপি ক্লাসিক, সাধারণ পুরানো
ভিবিএস স্ক্রিপ্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.