VB6: Runtime error "6": Overflow

I am learning AS level computing in England and the language we use is VB6.

I am working on an assignment that should be completed on 12/18/2014.

The project is intended for a hypothetical situation where a running club needs software to do the following: - Add members - View members - Edit member information - Find members - Remove members - Add training information for members - View training information - Compare training information - Automatically choose a group of runners based on the number of hours trained for

Here's my code for the problem:

Option Explicit

Private Sub CmdExitFromSelectTeam_Click()
Unload Me
End Sub

Private Sub SelectTeam()
Dim TrainingChannel As Integer
Dim Training As TrainingRecord
Dim MemberChannel As Integer
Dim Member As MemberRecord
Dim MemberRecordPointer As Integer
Dim TotalHoursTrained As Single
Dim TrainingRecordPointer As Integer
Dim FoundAtLeastOneRecord
FoundAtLeastOneRecord = False
MemberChannel = FreeFile
Open MemberFile For Random As MemberChannel Len = MemberLength
    MemberRecordPointer = 1
    Get MemberChannel, MemberRecordPointer, Member
    Do While Not EOF(MemberChannel)
        TotalHoursTrained = 0
        TrainingRecordPointer = 1
        TrainingChannel = FreeFile
        Open TrainingFile For Random As TrainingChannel Len = TrainingLength
            Get TrainingChannel, MemberRecordPointer, Training
            Do While Not EOF(TrainingChannel)
                If Member.ID = Training.MemberID Then
                    TotalHoursTrained = Round(TotalHoursTrained, 1) + Round(Training.TimeTaken, 1)
                End If
                TrainingRecordPointer = TrainingRecordPointer + 1 (*)
                Get TrainingChannel, MemberRecordPointer, Training
            Loop
        Close TrainingChannel
    LstTeamSelectDisplayTeam.AddItem TotalHoursTrained, 1
    LstTeamSelectDisplayTeam.AddItem Member.ID, 2
    LstTeamSelectDisplayTeam.AddItem Member.Forename, 3
    LstTeamSelectDisplayTeam.AddItem Member.Surname, 4
    MemberRecordPointer = MemberRecordPointer + 1
    Get MemberChannel, MemberRecordPointer, Member
    Loop
Close MemberChannel

End Sub

Private Sub Form_Load()
SelectTeam
End Sub

      

When this form (FrmSelectTeam.frm) is loaded at runtime, the line: marked with (*) is highlighted as a debug line.

I have no idea what the problem is and I will be grateful for all the help I can get, so thanks in advance !!!

James

+3


source to share


3 answers


Okay, thanks for your feedback, but really the reason (believe it or not) was a simple human error; I put "Get TrainingChannel, MemberRecordPointer, Training" instead of "Get TrainingChannel, TrainingRecordPointer, Training"

It's so annoying that something simple that could cause such a big problem.



But thanks again!

0


source


In VB6, the maximum value for the Integer data type is 32767. You seem to have exceeded this limit in the expression (*). You can change it to a 32-bit integer by declaring it long:



Dim TrainingRecordPointer As Long

      

+4


source


Answer to

@xpda is almost certainly correct.

One handy debugging trick for such an error is to modify the code slightly, as shown below:

Open MemberFile For Random As MemberChannel Len = MemberLength
MemberRecordPointer = 1
Get MemberChannel, MemberRecordPointer, Member
Do While Not EOF(MemberChannel)
    TotalHoursTrained = 0
    TrainingRecordPointer = 1
    TrainingChannel = FreeFile
    Open TrainingFile For Random As TrainingChannel Len = TrainingLength
        Get TrainingChannel, MemberRecordPointer, Training
        Do While Not EOF(TrainingChannel)
            If Member.ID = Training.MemberID Then
                TotalHoursTrained = Round(TotalHoursTrained, 1) + Round(Training.TimeTaken, 1)
            End If
            If TrainingRecordPointer > 32750 Then
                Debug.Print TrainingRecordPointer
            End If
            TrainingRecordPointer = TrainingRecordPointer + 1
            Get TrainingChannel, MemberRecordPointer, Training
        Loop
    Close TrainingChannel
LstTeamSelectDisplayTeam.AddItem TotalHoursTrained, 1
LstTeamSelectDisplayTeam.AddItem Member.ID, 2
LstTeamSelectDisplayTeam.AddItem Member.Forename, 3
LstTeamSelectDisplayTeam.AddItem Member.Surname, 4
MemberRecordPointer = MemberRecordPointer + 1
Get MemberChannel, MemberRecordPointer, Member
Loop
Close MemberChannel

      

Alternatively, you can put a breakpoint in the added If-Then and execute with the debugger.

0


source







All Articles