具体情况:
   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.   

    干嘛写Form_Initialize事件??写在Form_Load事件里试试
      

  2.   

    我改到load事件里了。至于数据库组件不知道如何改。凭天由命了,明天去客户那里。怕怕
      

  3.   

    用msgbox跟踪调试调试?
    楼主为何不单步运行调试呢,逐步缩小产生问题代码的范围。然后集中调试就可以了。
      

  4.   

    上面的代码运行都通过了,运行到最后一条语句,然后应该运行load事件了。就在那中间出错了