PoprzedniaWyżejGłównaSpis treściIndex hasełZnajdźBokGora
BokGora

Google
 

Obsługa błędów

Błędy pojawiają się kiedy programy są uruchamiane. Nawet jeżeli kod jest bez zarzutu, użytkownik może popełniać błędy. Może np. chcieć korzystać ze stacji dyskietek, w której nie ma dyskietki lub otwierać plik, który nie istnieje itd. Obowiązkiem programisty jest zapewnienie sposobu informowania o błędach, komunikowania się i (jeżeli to możliwe) poprawiania tych błędów. Można to zrobić przez dołączenie odpowiedniego kodu obsługi błędów w aplikacjach.

Kod obsługi błędów

Błędami pojawiającymi się w czasie działania programu można manipulować przez dołączenie instrukcji On Error w kodzie programu. Kiedy pojawi się błąd w czasie pracy i "winny temu" blok kodu nie zawiera instrukcji On Error, wykonywanie programu zostaje zatrzymane. Kiedy pojawi się błąd, a kod zawiera instrukcję On Error, działanie programu nie jest zatrzymywane; zamiast tego sterowanie programem jest przekazywane do bloku kodu obsługi błędu, który "radzi sobie" z błędem. Kiedy błąd zostanie usunięty, działanie programu będzie wznowione.

Oto podstawowa struktura procedury zawierającej kod obsługi błędu:

Sub NazwaProcedury
    On Error GoTo MiejsceObslugiBledow
    Rozkazy procedur
    ..................................
    Exit Sub
MiejsceObslugiBledow:
    Rozkazy obslugi bledow
    .........................................
    Exit Sub
End Sub

Instrukcja On Error jest pierwszą wykonywalną instrukcją w procedurze, ponieważ On Error włącza obsługę błędu dla wszystkich instrukcji, które następują po niej (w tej samej procedurze). Za instrukcją On Error znajduje się blok składający się z normalnych instrukcji procedury. Ostatnią instrukcją w tym bloku jest instrukcja Exit Sub, która umożliwia opuszczenie procedury przed kodem obsługi błędu, jeżeli błąd nie zostanie wykryty. Za nią znajduje się kod obsługi błędu (poprzedzony przez etykietę identyfikującą wiersz).

Oto przykładowa procedura Drive1_Change, z kodem obsługi błędu (w przypadku gdy stacja dysków jest pusta):

Sub Drive1_Change()
    On Error GoTo diskProblem
    Dir1.Path = Drive1.Drive
    Exit Sub
diskProblem:
    Drive1.Drive = Dir1.Path
    MsgBox "Dysk niedostępny", 48, "Błąd dyskowy"
    Exit Sub
End Sub

(Kontrolki DriveListBox i DirListBox, rozkazy Exit, On Error i MsgBox zostały opisane w innych częściach kursu).

Działanie pocedury:
Początkowa instrukcja On Error GoTo diskProblem "włącza" obsługę błędów dla całej procedury. Jeżeli błąd pojawił się w dowolnym miejscu w procedurze (po instrukcji On Error), sterowanie programem jest przekazywane do kodu obsługi błędu za diskProblem.
Instrukcja Dir.Path = Drive1.Drive ustawia właściwości Path okienka listy Dir1 Directories na stację wybraną w okienku listy Drive1 Drives. Jest to istota tej procedury. Jeżeli wybrana stacja jest poprawna i dyskietka jest do niej włożona instrukcja Dir1.Path = Drive1.Drive jest wykonywana i sterowanie jest przekazywane do następnej instrukcji, Exit Sub, która powoduje opuszczenie procedury. Jeżeli wybrana stacja nie jest poprawna lub dyskietka nie jest do niej włożona, pojawi się błąd i sterowanie zostanie przekazane do kodu obsługi błędu za diskProblem. Instrukcja Drive1.Drive = Dir1.Path przywraca listę okienka Path, Drive1 Directories do jej pierwotnych ustawień (działających przed uruchomieniem procedury), co umożliwia kontynuowanie programu. Instrukcja MsgBox informuje o błędzie użytkownika, aby mógł go poprawić. Instrukcja Exit Sub powoduje opuszczenie procedury.


Obiekt Err zawiera kilka własności, których można używać do wyświetlania dodatkowych informacji w procedurach obsługi błędów. Własność Err.Description zawiera wyjaśnienie sytuacji, która spowodowała błąd. Natomiast własność Err.Number zwraca numer błędu, który można wykorzystać do sprawdzenia rodzaju błędu. Można użyć tych własności do wyświetlenia komunikatów jako dodatkowego źródła informacji niezależnie od tego, czy w programie znajduje się blok obsługi tego błędu. Na przykład poniższa procedura obsługi błędów wykorzystuje własność Description do wyświetlania komuniaktu o błędzie, jeżeli pojawi się błąd podczas ładowania pliku z grafiką z dyskietki.

On Error GoTo DiskError
Image1.Picture = LoadPicture ("a:\plik1.wmf")
Exit Sub
DiskError:
MsgBox (Err.Description), , "Błąd podczas otwierania pliku"
Resume
LoadPicture

Można użyć tej techniki do wyświetlania komunikatów o takich problemach związanych z dyskietkami, jak niesformatowane dyskietki, brakujące pliki lub otwarte drzwiczki stacji dyskietek. Procedura obsługi błędów wykorzystuje instrukcję Resume, żeby ponownie spróbować załadować plik, gdy użytkownik usunie problem i kliknie OK w polu komunikatu. Gdy plik zostanie załadowany, instrukcja Exit Sub powoduje wyjście z procedury.

Inną strategią, którą można użyć w procedurze obsługi błędu, jest kilkakrotne ponawianie prób operacji, a następnie przejście dalej, jeżeli problem nie zostanie rozwiązany. Jest to użyteczna technika jeżeli błąd, który ma być obsługiwany, może być naprawiony przez użytkownika. Instrukcja Resume ponownie próbuje wykonać instrukcję, która spowodowała błąd, natomiast instrukcja Resume Next pomija tę instrukcję i przechodzi do następnego wiersza w procedurze zdarzenia.




Google
 
Poprzednia | Wyżej | Strona główna | Spis Treści | Index haseł | Opis VB

BokDol
PoprzedniaWyżejGłównaSpis treściIndex hasełZnajdźBokGora
BokGora