Íåñòðóêòóðèðàíî - Unstructured Error Handling
Òåõíèêà çà îáðàáîòêà íà ãðåøêè,
êîÿòî ñå âúðòè îêîëî âàðèàöèè íà èñòðóêöèÿ On Error... ñå íàðè÷à
íåñòðóêòóðèðàíà (unstructured). Òàçè òåõíèêà èçïîëçâà îáåêò
Err è ñòåêà çà âèêàíå (
call stack) íà Visual Basic.
-
Îáåêò Err
Âãðàäåíèÿò âúâ Visual Basic (built-in) îáåêò çà ãðåøêè, íàðå÷åí
Err, å îñíîâåí çà íåñòóêòóðèðàíî îáðàáîòâàíå íà ãðåøêè.
Òîçè îáåêò èìà íÿêîè ñâîéñòâà è
ìåòîäè äàäåíè â òàáëèöè 1 è 2.
Òàáëèöà 1.
| Ñâîéñòâà íà îáåêò Err |
Ñâîéñòâî
| Îïèñàíèå |
| Description | Êðàòúê íèç (string), îïèñâàù
ãðåøêàòà. |
| HelpContext | Êîíòåêñòíîòî ID çà ðàçäåëà îò
help, ñâúðçàí ñ ãðåøêàòà. |
| HelpFile | Ïúëíîòî èìå íà ñúîòâåòíèÿ help
(ïîìîùåí) ôàéë, àêî ñúùåñòâóâà |
| LastDLLError | Âúðíàòèÿò êîä îò ôóíêöèÿ, êîÿòî
å âúíøíà DLL. |
| Number | Íîìåðúò íà
ãðåøêàòà. |
| Source | Íèçúò (string), îïðåäåëÿù
îáåêòà, êîéòî ãåíåðèðà ãðåøêàòà,
ïðèìåðíî pplication.objectname, êàòî íàïðèìåð
Excel.Application. |
Òàáëèöà 2.
| Ìåòîäè íà îáåêò Err |
| Ìåòîä | Îïèñàíèå |
Clear
| Èçòðèâà ñòîéíîñòèòå íà âñè÷êè
ñâîéñòâà íà îáåêò Err.
Err().Clear( ) |
| Raise | Óêàçâà íà Visual Basic äà
ãåíåðèðà runtime error è
óñòàíîâÿâà
ñòîéíîñòèòå íà ñâîéñòâàòà íà
îáåêò Err ðàâíè íà ïàðàìåòðèòå íà
ìåòîä Raise :
Err.Raise(Number,
Source, Description, _
HelpFile,
HelpContext) |
-
Ðàç÷åò íà ãðåøêè ïðè èçïúëíåíèå - runtime errors
Visual Basic îòêðèâà ãðåøêè ïðè èçïúëíåíèå
âåäíàãà ñëåä êàòî ãðåøêàòà ñå ïîÿâè, óñòàíîâè ñâîéñòâàòà íà îáåêò
Err, è ïîñî÷è ëîêàöèÿòà, â íàé-÷åñòèÿ ñëó÷àé íà ðåäà ïðåäâèäåí îò
ïðîãðàìèñòà ñ On Error.... Òàçè ëîêàöèÿ ìîæå äà å:
· Ðåäà îò êîäà íåïîñðåäñòâåíî
ñëåäâàù òîçè, â êîéòî å âúçíèêíàëà ãðåøêàòà.
· Äðóãà ëîêàöèÿ âúòðå â
offending procedure.
· Ïðîöåäóðàòà, êîÿòî âèêà
offending procedure, àêî èìà òàêàâà. Àêî
íÿìà, VB èçðàáîòâà ñúîáùåíèå çà ãðåøêà è
ïðåêúñâà ïðàãðàìàòà.
-
Îáðàáîòêà íà ãðåøêà âúâ ðåä (In-line error handling)
Îáðàáîòêàòà íà ãðåøêà ìîæå äà
áúäå "ïðåíàñî÷åíà" êúì ðåä, ñëåäâàù ðåäà îò êîäà, êúäåòî ùå ñå îòêðèå
ãðåøêàòà, íàé-÷åñòî ñ èíñòðóêöèÿ On Error è òîãàâà çàïèñúò å òàêúâ:
On
Error Resume Next
Íàðè÷à ñå îáðàáîòêà íà ãðåøêà âúâ
ðåä (
in-line error handling).
Åòî åäèí ïðèìåð çà ïðåèìåíóâàíå
íà ôàéë:
Dim
sOldName, sNewName As String
On
Error Resume Next
' ïèòà çà ñúùåñòâóâàùî
èìå íà ôàéë - file name
sOldName
= InputBox("Enter the file name to rename")
' ïèòà çà íîâî èìå íà
ôàéë - new name
sNewName
= InputBox("Enter the new file name")
' ïðåèìåíîâàíå íà ôàéëà -
Rename file
Rename("c:"
& sOldName, "c:" & sNewName)
' Deal with error
If
Err( ).Number = 53 Then
' ãðåøêà îò íåíàìåðåí
ôàéë - File not found error
MsgBox("File
" & sOldName & " not found")
Exit
Sub
Else
' âñè÷êè äðóãè ãðåøêè - errors
MsgBox(Err().Number
& ": " & Err( ).Description)
Exit
Sub
End
If