原数据库为access97,转换成2000后,将provider修改为jet4.0,出现一些错误,不知原代码有没有问题,请各位帮我看一下好吗?谢谢了On Error GoTo errHandle
.... With AdoPwd
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockOptimistic
        .CommandType = adCmdText 'adCmdUnknown
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" & _
            "Data Source=" & App.Path & "\database\PHONErepair.MDB;" & "Jet OLEDB:Database Password=admin"
         
         .RecordSource = "select * from user where user_ID='" & userId & "' and user_pwd='" & userOldPwd & "'"
         .Refresh
    End With If Not (AdoPwd.Recordset.EOF And AdoPwd.Recordset.BOF) Then      '执行到这一句时就跳到errhandle去了?单步执行出现AdoPwd.Recordset.EOF =<对象变量或with块变量未设置> 
        userPwd = Trim$(Me.txtNewPwd.Text)
            userVerifyPwd = Trim$(Me.txtVerifyPwd.Text)
.........errHandle:
    AddErrLog Now(), 122
    MsgBox "密码更新错误!", vbCritical

解决方案 »

  1.   

    这样简洁明了,不易出错
        Dim rsTemp As New ADODB.Recordset
        Dim szPath As String    szPath = App.Path + "\aaa.mdb"
        strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & szPath
        rsTemp.CursorLocation = adUseClient
        rsTemp.Open "select * from table", strCnn ,adOpenDynamic,adLockPessimistic
      

  2.   

    to busisoft:我用ado控件应该一样,
    to 左手:安装MDAC_TYP.EXE没有用
      

  3.   

    定义记录集变量时使用了New关键字吗?
      

  4.   

    AdoPwd你定义的是什么类型? 从你给出的看,应该是adodb.command类型吧?
    那样做是不对的,应该这样:dim iRe as adodb.recordset  '要定义一个recordset类型变量,这个变量才能存储返回的记录集With AdoPwd
            .CursorLocation = adUseClient
            .CursorType = adOpenDynamic
            .LockType = adLockOptimistic
            .CommandType = adCmdText 'adCmdUnknown
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" & _
                "Data Source=" & App.Path & "\database\PHONErepair.MDB;" & "Jet OLEDB:Database Password=admin"
             
             .RecordSource = "select * from user where user_ID='" & userId & "' and user_pwd='" & userOldPwd & "'"
             set iRe=.Execute  'Execute方法才是执行的.
        End WithIf Not (iRe.EOF And iRe.BOF) Then      '执行到这一句时就跳到errhandle去了?单步执行出现AdoPwd.Recordset.EOF =<对象变量或with块变量未设置> 
            userPwd = Trim$(Me.txtNewPwd.Text)
                userVerifyPwd = Trim$(Me.txtVerifyPwd.Text)
    .........errHandle:
        AddErrLog Now(), 122
        MsgBox "密码更新错误!", vbCritical
      

  5.   

    如果是要访问ACCESS数据库时建议采用DAO的数据访问方法要好得多。
      

  6.   

    '其实可以直接用recordset对象打开,不用那么麻烦:
    On Error GoTo errHandle
    .... dim adopwd as new adodb.recordset
    With AdoPwd
            .CursorLocation = adUseClient
            .open "select * from user where user_ID='" & userId & "' and user_pwd='" & userOldPwd & "'","Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" & _
                "Data Source=" & App.Path & "\database\PHONErepair.MDB;" & "Jet OLEDB:Database Password=admin",adOpenDynamic,adLockOptimistic
        End With If Not (AdoPwd.EOF And AdoPwd.BOF) Then      '执行到这一句时就跳到errhandle去了?单步执行出现AdoPwd.Recordset.EOF =<对象变量或with块变量未设置> 
            userPwd = Trim$(Me.txtNewPwd.Text)
                userVerifyPwd = Trim$(Me.txtVerifyPwd.Text)
    .........errHandle:
        AddErrLog Now(), 122
        MsgBox "密码更新错误!", vbCritical
      

  7.   

    很可能是你的AdoPwd没有分配空间最好将它的定义语句写出来,再看看有没有
    set adopwd=new adodb.connection
      

  8.   

    adopwd 我是没有定义,因为我用的是adodc控件,应该不用定义吧
    如果我不用控件,直接定义,dim rs as adodb.recordset ....
     rs.open "select * from user where user_ID='" & userId & "' and user_pwd='" & userOldPwd & "'","...",adOpenDynamic,adLockOptimistic
    ...
    同样出错,而如果直接打开user表不加条件判断就可以
    rs.open "[user]","...",adOpenDynamic,adLockOptimistic是记录集没有打开符合这个条件的记录???不知道是什么原因??
    to  zjcxc(邹建) :用了你的方法,但执行到这一句时set iRe=.Execute  出现错误,说未找到方法或数据成员
      

  9.   

    dim rs as adodb.recordset 
    改成:
    dim rs as new adodb.recordset
      

  10.   

    用了new,set rs =new adodb.recordset