There are three main types of problems that you will deal with, directly or indirectly:
One of the best qualities of an effective programmer is to anticipate as many problems as possible and to deal with them in the early stages. Some problems can be easy to fix. With some others, you will simply need to build more experience to know how to fix them. Unfortunately, it will not be unusual to have users asking you to fix your application when a problem may not come from it.
Most or early errors occur in your code. The Microsoft Visual Basic Code Editor can help you detect syntax errors and fix them. For example, when a certain error occurs while you are writing your code, a message box would display, prompting you to fix the problem:
If there is a syntax error that that the IDE didn't signal or that you ignored when writing your code, you would find it out when the form or report is previewed. A run-time error is one that occurs when using your application. Consider the following form:
Private Sub cmdCalculate_Click() Dim Number# Dim Twice# Number = [txtNumber] Twice = Number * 2 [txtResult] = Twice End Sub Here is an example of executing it:
The first aspect your should take into consider is to imagine what could cause a problem. If you think there is such a possibility, you can create a label that could be used to transfer code if a problem occurs. Here is an example: Private Sub cmdCalculate_Click() Dim Number# Dim Twice# Number = [txtNumber] Twice = Number * 2 [txtResult] = Twice ThereWasAProblem: MsgBox "There was a problem when executing your instructions." End Sub If you create such a label, you should specify when to jump to that label. Otherwise, as in this case, the label section would always execute. Here is an example of running the above version:
In this case, we want the label section to execute only when we want it to. To prevent the execution from reaching this section if not directed so, you can add an Exit Sub line above the label section: Private Sub cmdCalculate_Click() Dim Number# Dim Twice# Number = [txtNumber] Twice = Number * 2 [txtResult] = Twice Exit Sub ThereWasAProblem: MsgBox "There was a problem when executing your instructions" End Sub This time if you execute the program with an appropriate value, the label section would not be reached.
The above code will work fine if the right value is provided. When you preview the form, imagine that the user types an inappropriate value such as 24$.58 instead of 244.58. In this case, the value is not a number. You would like the program to let the user know that there was a problem:
With some experience, you would know what the problem was, otherwise, you would face a vague explanation. If a problem occurs when a person is using your database, the computer may display an insignificant message to the user who would not know what to do with it. Therefore, you can start by creating an appropriate label as introduced above. An error normally occurs in a procedure. Therefore, to make your code easier to read, you should create a label that shows that it is made for an error instead of being a regular label. The label should also reflect the name of the procedure. Here is an example: Private Sub cmdCalculate_Click() Dim Number# Dim Twice# Number = [txtNumber] Twice = Number * 2 [txtResult] = Twice Exit Sub cmdCalculate_Click_Error: MsgBox "There was a problem when executing your instructions" End Sub When you think there will be a problem in your code, somewhere in the lines under the name of the procedure but before the line that could cause the problem, type On Error GoTo followed by the name of the label that would deal with the error. Here is an example: Private Sub cmdCalculate_Click() On Error GoTo cmdCalculate_Click_Error Dim Number# Dim Twice# Number = [txtNumber] Twice = Number * 2 [txtResult] = Twice Exit Sub cmdCalculate_Click_Error: MsgBox "There was a problem when executing your instructions" End Sub This informs the compiler that, if there is a problem when this code executes, jump to the indicated label. When the On Error GoTo statement is used, this indicates that if any type of error occurs while the code of this procedure is executed, transfer the compilation to the label. In this case, as soon as something bad happens, the compiler marks the area where the problem occurred, skips the normal code and jumps to the label indicated by the On Error GoTo line. After the section of that label is executed, the compiler returns where the error occurred. If there is nothing to solve the problem, the compiler continues down but without executing the lines of code involved. In this case, it would encounter the Exit Sub line and get out of the procedure.
Although the label is more explicit, it only indicates to the compiler what line to jump to in case of a problem. The alternative is to specify a line number instead of a label. If a problem occurs in your code and you provide a label to display a friendly message as done above, the compiler would display the message and exit from the procedure. If this happens, as mentioned above, when the compiler returns where the problem occurred, you can provide an alternative. For example, in our program, if the user provides an inappropriate value that causes the error, you can provide an alternate value and ask the compiler to continue as if nothing happened. In this case, you want to compiler to "resume" its activity. To indicate that the program should continue, you can use the Resume keyword. Here is an example: Private Sub cmdCalculate_Click() On Error GoTo cmdCalculate_Click_Error Dim Number# Dim Twice# Number = [txtNumber] Resume Twice = Number * 2 [txtResult] = Twice Exit Sub cmdCalculate_Click_Error: MsgBox "There was a problem when executing your instructions" End Sub When an error occurs, if you want the program to continue with with an alternate value than the one that caused the problem, in the label section, type Resume Next. Here is an example: Private Sub cmdCalculate_Click() On Error GoTo cmdCalculate_Click_Error Dim Number# Dim Twice# Number = [txtNumber] Twice = Number * 2 [txtResult] = Twice Exit Sub cmdCalculate_Click_Error: MsgBox "There was a problem when executing your instructions" Resume Next End Sub In this case, since any numeric variable is initialized with 0, when the compiler returns to the line of code that caused the problem, it would use 0 as a substitute to the inappropriate value. Based on this, you can provide a new value to use in case of error. Here is an example: Private Sub cmdCalculate_Click() On Error GoTo cmdCalculate_Click_Error Dim Number# Dim Twice# Number = [txtNumber] Twice = Number * 2 [txtResult] = Twice Exit Sub cmdCalculate_Click_Error: MsgBox "There was a problem when executing your instructions" Number = 16 Resume Next End Sub Here is one example of running the program:
|
|
|||||||||||||||||||||||||||||||
|