【问题标题】:VB6: Run-time error '6': OverflowVB6:运行时错误“6”:溢出
【发布时间】:2014-12-11 17:02:16
【问题描述】:

我在英国学习 AS Level 的计算,我们使用的语言是 VB6。

我正在处理必须在 2014 年 12 月 18 日完成的任务。

该项目是针对跑步俱乐部需要软件来执行以下操作的假设情况: - 添加成员 - 查看会员 - 编辑会员信息 - 搜索会员 - 删除成员 - 为会员添加培训信息 - 查看培训信息 - 比较培训信息 - 根据训练小时数自动选择一组跑步者

这是我的问题表单代码:

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

在运行时加载此表单 (FrmSelectTeam.frm) 时,标有 (*) 的行:突出显示为调试行。

我不知道问题出在哪里,我会很感激我能得到的所有帮助,所以提前谢谢!!!

詹姆斯

【问题讨论】:

  • 你有多少条记录?尝试使用 long 而不是整数。
  • 文件中有超过32768条记录吗?如果是这样,你已经达到了整数类型的限制。将 Dim TrainingRecordPointer As Integer 更改为 Dim TrainingRecordPointer As Long 以将上限更改为 ~21 亿。
  • 天哪...告诉你的导师停止使用 VB6 教学! 难以置信地摇头
  • 另外一个用于如此清楚地提出问题并提供所有重要信息
  • 很好的问题,也是初学者的常见问题。

标签: vb6 runtime-error overflow


【解决方案1】:

在 VB6 中,Integer 数据类型的最大值是 32767。您显然超出了 (*) 语句中的限制。您可以通过将其声明为 long 来将其更改为 32 位整数:

Dim TrainingRecordPointer As Long

【讨论】:

    【解决方案2】:

    @xpda 的回答几乎肯定是正确的。

    针对此类错误的一个方便的调试技巧是稍微修改您的代码,如下所示:

    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
    

    或者,您可以在添加的 If-Then 中放置一个断点,然后使用调试器单步执行。

    【讨论】:

      【解决方案3】:

      感谢您的反馈,但实际上原因(信不信由你)是简单的人为错误;我把“Get TrainingChannel,MemberRecordPointer,Training”代替了“Get TrainingChannel,TrainingRecordPointer,Training”

      这么简单的事情竟然会引起这么大的问题,真是太烦人了。

      但再次感谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多