具体情况:
1。软件中没有使用第三方控件
2。在窗体Private Sub Form_Initialize() 事件中有几十行读取数据库的代码。代码如下
Private Sub Form_Initialize()
On Error Resume Next
Dim i As Integer
sh_counterjz = GetSetting(App.Title, "Shlc", "jzx", "39")
If sh_counterjz = 38 Then
Data8.Recordset.MoveFirst
Do While Not Data8.Recordset.EOF
gox(xnumber, 0) = Data8.Recordset.Fields("Revise X").Value
gox(xnumber, 1) = Data8.Recordset.Fields("Show X").Value
xnumber = xnumber + 1
Data8.Recordset.MoveNext
Loop
Data9.Recordset.MoveFirst
Do While Not Data9.Recordset.EOF
goy(ynumber, 0) = Data9.Recordset.Fields("Revise Y").Value
goy(ynumber, 1) = Data9.Recordset.Fields("Show Y").Value
ynumber = ynumber + 1
Data9.Recordset.MoveNext
Loop
Data10.Recordset.MoveFirst
Do While Not Data10.Recordset.EOF
goz(znumber, 0) = Data10.Recordset.Fields("Revise Z").Value
goz(znumber, 1) = Data10.Recordset.Fields("Show Z").Value
ynumber = ynumber + 1
Data10.Recordset.MoveNext
Loop
For i = 0 To 10
goxyz(i, 0) = gox(i, 0) - gox(i, 1)
goxyz(i, 1) = goy(i, 0) - goy(i, 1)
goxyz(i, 2) = goz(i, 0) - goz(i, 1)
Next
For i = 0 To 10
goxyz(i, 3) = goxyz(i, 0) / gox(i, 0)
If goxyz(i, 3) = 0 Then
goxyz(i, 3) = 1
ElseIf goxyz(i, 3) < 0 Then
goxyz(i, 3) = 1 - Abs(goxyz(i, 3))
ElseIf goxyz(i, 3) > 0 Then
goxyz(i, 3) = 1 + goxyz(i, 3)
End If
goxyz(i, 4) = goxyz(i, 1) / goy(i, 0)
If goxyz(i, 4) = 0 Then
goxyz(i, 4) = 1
ElseIf goxyz(i, 4) < 0 Then
goxyz(i, 4) = 1 - Abs(goxyz(i, 4))
ElseIf goxyz(i, 4) > 0 Then
goxyz(i, 4) = 1 + goxyz(i, 4)
End If
goxyz(i, 5) = goxyz(i, 2) / goz(i, 0)
If goxyz(i, 5) = 0 Then
goxyz(i, 5) = 1
ElseIf goxyz(i, 5) < 0 Then
goxyz(i, 5) = 1 - Abs(goxyz(i, 5))
ElseIf goxyz(i, 5) > 0 Then
goxyz(i, 5) = 1 + goxyz(i, 5)
End If
Next
For i = 0 To 9
goxyz(i, 6) = -(goxyz(i, 3) - goxyz(i + 1, 3)) / 10
goxyz(i, 7) = -(goxyz(i, 4) - goxyz(i + 1, 4)) / 10
goxyz(i, 8) = -(goxyz(i, 5) - goxyz(i + 1, 5)) / 10
Next
For i = 0 To 10
goxyz(i, 9) = Abs(gox(i, 0) - gox(i + 1, 0)) / 2 / 10
goxyz(i, 10) = Abs(goy(i, 0) - goy(i + 1, 0)) / 2 / 10
goxyz(i, 11) = Abs(goz(i, 0) - goz(i + 1, 0)) / 2 / 10
Next
ElseIf sh_counterjz = 37 Then
Data13.Recordset.MoveFirst
Do While Not Data13.Recordset.EOF
gox(0, 0) = Data13.Recordset.Fields("Revise X").Value
gox(0, 1) = Data13.Recordset.Fields("Show X").Value
Data13.Recordset.MoveNext
Loop
Data14.Recordset.MoveFirst
Do While Not Data14.Recordset.EOF
goy(0, 0) = Data14.Recordset.Fields("Revise Y").Value
goy(0, 1) = Data14.Recordset.Fields("Show Y").Value
Data14.Recordset.MoveNext
Loop
Data15.Recordset.MoveFirst
Do While Not Data15.Recordset.EOF
goz(0, 0) = Data15.Recordset.Fields("Revise Z").Value
goz(0, 1) = Data15.Recordset.Fields("Show Z").Value
Data15.Recordset.MoveNext
Loop
If gox(0, 0) = 0 Then
goxyz(0, 20) = 1
Else
goxyz(0, 20) = 1 + (gox(0, 0) - gox(0, 1)) / gox(0, 0)
End If
If goy(0, 0) = 0 Then
goxyz(1, 20) = 1
Else
goxyz(1, 20) = 1 + (goy(0, 0) - goy(0, 1)) / goy(0, 0)
End If
If goz(0, 0) = 0 Then
goxyz(2, 20) = 1
Else
goxyz(2, 20) = 1 + (goz(0, 0) - goz(0, 1)) / goz(0, 0)
End If
End If
End Sub
3。用msgbox跟踪调试,上面代码运行完后会有一秒左右的停顿,然后就出现
内存溢出的错误,窗体还没有执行load事件。
4。程序中有引用 office object 9.0 库
5。开发环境:win2000(有sp4补丁)+office2000+dao360
硬件配置:p42.6+512M
6。在公司其它电脑上运行都没有问题,无论内存大小、是否安装了office。
1。软件中没有使用第三方控件
2。在窗体Private Sub Form_Initialize() 事件中有几十行读取数据库的代码。代码如下
Private Sub Form_Initialize()
On Error Resume Next
Dim i As Integer
sh_counterjz = GetSetting(App.Title, "Shlc", "jzx", "39")
If sh_counterjz = 38 Then
Data8.Recordset.MoveFirst
Do While Not Data8.Recordset.EOF
gox(xnumber, 0) = Data8.Recordset.Fields("Revise X").Value
gox(xnumber, 1) = Data8.Recordset.Fields("Show X").Value
xnumber = xnumber + 1
Data8.Recordset.MoveNext
Loop
Data9.Recordset.MoveFirst
Do While Not Data9.Recordset.EOF
goy(ynumber, 0) = Data9.Recordset.Fields("Revise Y").Value
goy(ynumber, 1) = Data9.Recordset.Fields("Show Y").Value
ynumber = ynumber + 1
Data9.Recordset.MoveNext
Loop
Data10.Recordset.MoveFirst
Do While Not Data10.Recordset.EOF
goz(znumber, 0) = Data10.Recordset.Fields("Revise Z").Value
goz(znumber, 1) = Data10.Recordset.Fields("Show Z").Value
ynumber = ynumber + 1
Data10.Recordset.MoveNext
Loop
For i = 0 To 10
goxyz(i, 0) = gox(i, 0) - gox(i, 1)
goxyz(i, 1) = goy(i, 0) - goy(i, 1)
goxyz(i, 2) = goz(i, 0) - goz(i, 1)
Next
For i = 0 To 10
goxyz(i, 3) = goxyz(i, 0) / gox(i, 0)
If goxyz(i, 3) = 0 Then
goxyz(i, 3) = 1
ElseIf goxyz(i, 3) < 0 Then
goxyz(i, 3) = 1 - Abs(goxyz(i, 3))
ElseIf goxyz(i, 3) > 0 Then
goxyz(i, 3) = 1 + goxyz(i, 3)
End If
goxyz(i, 4) = goxyz(i, 1) / goy(i, 0)
If goxyz(i, 4) = 0 Then
goxyz(i, 4) = 1
ElseIf goxyz(i, 4) < 0 Then
goxyz(i, 4) = 1 - Abs(goxyz(i, 4))
ElseIf goxyz(i, 4) > 0 Then
goxyz(i, 4) = 1 + goxyz(i, 4)
End If
goxyz(i, 5) = goxyz(i, 2) / goz(i, 0)
If goxyz(i, 5) = 0 Then
goxyz(i, 5) = 1
ElseIf goxyz(i, 5) < 0 Then
goxyz(i, 5) = 1 - Abs(goxyz(i, 5))
ElseIf goxyz(i, 5) > 0 Then
goxyz(i, 5) = 1 + goxyz(i, 5)
End If
Next
For i = 0 To 9
goxyz(i, 6) = -(goxyz(i, 3) - goxyz(i + 1, 3)) / 10
goxyz(i, 7) = -(goxyz(i, 4) - goxyz(i + 1, 4)) / 10
goxyz(i, 8) = -(goxyz(i, 5) - goxyz(i + 1, 5)) / 10
Next
For i = 0 To 10
goxyz(i, 9) = Abs(gox(i, 0) - gox(i + 1, 0)) / 2 / 10
goxyz(i, 10) = Abs(goy(i, 0) - goy(i + 1, 0)) / 2 / 10
goxyz(i, 11) = Abs(goz(i, 0) - goz(i + 1, 0)) / 2 / 10
Next
ElseIf sh_counterjz = 37 Then
Data13.Recordset.MoveFirst
Do While Not Data13.Recordset.EOF
gox(0, 0) = Data13.Recordset.Fields("Revise X").Value
gox(0, 1) = Data13.Recordset.Fields("Show X").Value
Data13.Recordset.MoveNext
Loop
Data14.Recordset.MoveFirst
Do While Not Data14.Recordset.EOF
goy(0, 0) = Data14.Recordset.Fields("Revise Y").Value
goy(0, 1) = Data14.Recordset.Fields("Show Y").Value
Data14.Recordset.MoveNext
Loop
Data15.Recordset.MoveFirst
Do While Not Data15.Recordset.EOF
goz(0, 0) = Data15.Recordset.Fields("Revise Z").Value
goz(0, 1) = Data15.Recordset.Fields("Show Z").Value
Data15.Recordset.MoveNext
Loop
If gox(0, 0) = 0 Then
goxyz(0, 20) = 1
Else
goxyz(0, 20) = 1 + (gox(0, 0) - gox(0, 1)) / gox(0, 0)
End If
If goy(0, 0) = 0 Then
goxyz(1, 20) = 1
Else
goxyz(1, 20) = 1 + (goy(0, 0) - goy(0, 1)) / goy(0, 0)
End If
If goz(0, 0) = 0 Then
goxyz(2, 20) = 1
Else
goxyz(2, 20) = 1 + (goz(0, 0) - goz(0, 1)) / goz(0, 0)
End If
End If
End Sub
3。用msgbox跟踪调试,上面代码运行完后会有一秒左右的停顿,然后就出现
内存溢出的错误,窗体还没有执行load事件。
4。程序中有引用 office object 9.0 库
5。开发环境:win2000(有sp4补丁)+office2000+dao360
硬件配置:p42.6+512M
6。在公司其它电脑上运行都没有问题,无论内存大小、是否安装了office。
楼主为何不单步运行调试呢,逐步缩小产生问题代码的范围。然后集中调试就可以了。