我是一个vb的初学者,写了一段读取数据库的代码,但读出全是空值,请高手看看哪里出问题了。
代码如下
    Dim RecNum As Integer, I As Integer
    On Error Resume Next
    Shujuku.Filter = "工程 (*.Mdb)|*.Mdb"
    Shujuku.ShowOpen
    If Shujuku.FileName <> "" Then
        g_ProjectFile = Shujuku.FileName
        Set g_MyWs = DBEngine.Workspaces(0)
        Set g_d_Base = g_MyWs.OpenDatabase(g_ProjectFile)
        Set Arecord = g_d_Base.OpenRecordset("观测数据表", dbOpenTable)
With Arecord
    If .RecordCount > 0 Then
    Point_MaxNum = .RecordCount
    RecNum = Point_MaxNum
    .MoveFirst
    For I = 1 To RecNum
        Obs_Time(I - 1) = .Fields(0)
        Point_Name(I - 1) = .Fields(1)
        Point_X(I - 1) = .Fields(2)
        Point_Y(I - 1) = .Fields(3)
        Point_H(I - 1) = .Fields(4)
        If I < RecNum Then
        .MoveNext
        End If
    Next I
    End If
End With
Arecord.Close
End If

解决方案 »

  1.   

    用.Fields(X).Value似乎还是不行。
      

  2.   

    我估计还有个原因就是If .RecordCount > 0 Then 这一句根本就不成立,所以下面读记录的语句也都没有执行.
    观察到你前面是用OpenDatabase来打开数据库的,
    请你尝试在使用Recordset.RecordCount属性之前,先执行一下Recordset.Movelast
    否则RecordCount的值为0
      

  3.   

    单步调试并监视 .Fields(X)的值是否为空,如果为空,请再打开看看你的表吧。
      

  4.   

    谢谢各位。RecordCount不为0,且是正确的19。且逐步调试之后,每一步都能够顺利执行,所以还是不知道到底哪里出错了。
      

  5.   

    数据库程序部分没有问题。1看看是否引用了DAO 
    2看看以下程序左边部分在哪定义的
      Obs_Time(I - 1) = .Fields(0)
      Point_Name(I - 1) = .Fields(1)
      Point_X(I - 1) = .Fields(2)
      Point_Y(I - 1) = .Fields(3)
      Point_H(I - 1) = .Fields(4)
      

  6.   

    谢谢各位,原因找到了,是没有重新定义数组,
    加一个redim preserve Obs_Time(Point_MaxNum)等等就行了。