我用ACCESS做后台库,VB做前台界面,ADO对象方法。
库中有GSB、BMB、BZB、DAB(工资表、部门表、班组表、档案表)
程序如下,但它报错,谁能帮我看看。谢谢。Private Sub Form_Activate()
  Dim LQ As ADODB.Connection
  Dim gsB As ADODB.Recordset
  Dim bmB As ADODB.Recordset
  Dim bzB As ADODB.Recordset
  Dim daB As ADODB.Recordset
  
  Set LQ = New ADODB.Connection   '[人事管理]数据库实例化
  Set gsB = New ADODB.Recordset   '[公司]表实例化
  Set bmB = New ADODB.Recordset   '[部门]表实例化
  Set bzB = New ADODB.Recordset   '[班组]表实例化
  Set daB = New ADODB.Recordset   '[档案]表实例化
  
  LQ.Provider = "microsoft.jet.oledb.4.0"
  LQ.Open "data source=" & App.Path & "\data\LQ.mdb"    '绑定数据库
  gsB.Open "GSB", LQ, adOpenDynamic, adLockOptimistic   '绑定公司表
  bmB.Open "BMB", LQ, adOpenDynamic, adLockOptimistic   '绑定部门表
  bzB.Open "BZB", LQ, adOpenDynamic, adLockOptimistic   '绑定班组表
  daB.Open "DAB", LQ, adOpenDynamic, adLockOptimistic   '绑定档案表
  
  Dim i As String
  Dim nodX As Node
  Dim tA As ADODB.Recordset
  Dim tB As ADODB.Recordset
  Dim tC As ADODB.Recordset
  Set tA = New ADODB.Recordset
  Set tB = New ADODB.Recordset
  Set tC = New ADODB.Recordset
  gsB.MoveFirst
  bmB.MoveFirst
  bzB.MoveFirst
  daB.MoveFirst
  
a:  If Not gsB.EOF Then
      Set nodX = TryTV.Nodes.Add(, , , gsB.Fields(0).Value)
      i = gsB.Fields(0).Value
      tA.Open "select * from BMB where 公司 ='" & i & "'", LQ, adOpenDynamic, adLockOptimistic
      
b:      If Not tA.EOF Then
          Set nodX = TryTV.Nodes.Add(1, tvwChild, , tA.Fields(1).Value)
          i = tA.Fields(1).Value
          tB.Open "select * from BZB where 部门 ='" & i & "'", LQ, adOpenDynamic, adLockOptimistic
          
c:          If Not tB.EOF Then
              Set nodX = TryTV.Nodes.Add(2, tvwChild, , tB.Fields(1).Value)
              i = tB.Fields(1).Value
              tC.Open "select * from daB where 班组 ='" & i & "'", LQ, adOpenDynamic, adLockOptimistic
              
d:              If Not tC.EOF Then
                  Set nodX = TryTV.Nodes.Add(3, tvwChild, , tC.Fields(3).Value)
                  tC.MoveNext
                  GoTo d
                End If
                
              tB.MoveNext
              GoTo c
            End If
            
          tA.MoveNext
          GoTo b
        End If
        
      gsB.MoveNext
      GoTo a
    End If
    
End Sub

解决方案 »

  1.   

    LQ.Open "data source=" & App.Path & "\data\LQ.mdb"    '绑定数据库
      gsB.Open "GSB", LQ, adOpenDynamic, adLockOptimistic   '绑定公司表
      bmB.Open "BMB", LQ, adOpenDynamic, adLockOptimistic   '绑定部门表
      bzB.Open "BZB", LQ, adOpenDynamic, adLockOptimistic   '绑定班组表
      daB.Open "DAB", LQ, adOpenDynamic, adLockOptimistic   '绑定档案表好象不能同时有多个当前连接吧!
      

  2.   

    LQ.Provider = "microsoft.jet.oledb.4.0"
      LQ.Open "data source=" & App.Path & "\data\LQ.mdb"    '绑定数据库
      gsB.Open "GSB", LQ, adOpenDynamic, adLockOptimistic   '绑定公司表
      bmB.Open "BMB", LQ, adOpenDynamic, adLockOptimistic   '绑定部门表
      bzB.Open "BZB", LQ, adOpenDynamic, adLockOptimistic   '绑定班组表
      daB.Open "DAB", LQ, adOpenDynamic, adLockOptimistic   '绑定档案表我想是连接上出了问题了吧,连接MDB文件可以不用用户名和密码这些参数吗?
      

  3.   

    不用那些参数没问题的。
    报错:“实时错误‘3705’
    对象打开时,不允许操作。”注:我的数据库没打开。调试显示在此语句:
    tA.Open "select * from BMB where 公司 ='" & i & "'", LQ, adOpenDynamic, adLockOptimistic但只要把GOTO语句删除就没问题了。
    不过删除了GOTO语句 就不能循环了。
      

  4.   

    在所有的GOTO 前面加一行
    CLOSE
    比如:
    gsB.close
      

  5.   

    你的GOTO也太多了
    建议在程序中最好不要这样用GOTO语句
    一个字
    乱!!!
      

  6.   

    谁说你的数据库没打开
    这条语句是做什么的!!!
    gsB.Open ......
      

  7.   

    要是表被关闭了,还怎么进行下面的GOTO程序呀!
    如果不这样做(不用GOTO语句),谁还有什么好办法?
      

  8.   

    呵呵
    当然是再open啦
    我觉得你的整个思路有问题
      

  9.   

    用不着设那么多的recordset
    一个就够了
    许多事情可以用SQL去做.