出现该错误的程序  提示:实时'91'错误 未设置对象变量或With block变量问题
Private Sub cmdCancel_Click()
    Unload Me
End SubPrivate Sub cmdOK_Click()
    Dim txtSQL, MsgText As String
    Dim mrc As ADODB.Recordset
    
    If Trim(Text1(1).Text) <> Trim(Text1(2).Text) Then
        MsgBox "密码输入不正确!", vbOKOnly + vbExclamation, "警告"
        Text1(1).SetFocus
        Text1(1).Text = ""
    Else
        txtSQL = "select * from user_Info where user_ID = '" & UserName & "'"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        mrc.Fields(1) = Text1(1).Text
        mrc.Update
        mrc.Close
        MsgBox "密码修改成功!", vbOKOnly + vbExclamation, "修改密码"
        Me.Hide
        
    End If
        
        
End SubPrivate Sub Form_Load()End Sub问题很急 是修改密码的界面 ,很有可能是与数据库连接的问题
请高手门指点  非常感激 我的qq154259482

解决方案 »

  1.   

    Dim mrc As New ADODB.Recordset
      

  2.   

    这段没问题,将你ExecuteSQL那个过程贴出来看看
      

  3.   

    Public Function ExecuteSQL(ByVal SQL _
       As String, MsgString As String) _
       As ADODB.Recordset
    'executes SQL and returns Recordset
       Dim cnn As ADODB.Connection
       Dim rst As ADODB.Recordset
       Dim sTokens() As String
       
       On Error GoTo ExecuteSQL_Error
       
       sTokens = Split(SQL)
       Set cnn = New ADODB.Connection
       cnn.Open CONN
       If InStr("INSERT,DELETE,UPDATE", _
          UCase$(sTokens(0))) Then
          cnn.Execute SQL
          MsgString = sTokens(0) & _
             " query successful"
       Else
          Set rst = New ADODB.Recordset
          rst.Open Trim$(SQL), cnn, _
             adOpenKeyset, _
             adLockOptimistic
          'rst.MoveLast     'get RecordCount
          Set ExecuteSQL = rst
          MsgString = "查询到" & rst.RecordCount & _
             " 条记录 "
       End If
    ExecuteSQL_Exit:
       Set rst = Nothing
       Set cnn = Nothing
       Exit Function
      

  4.   

    ExecuteSQL_Exit:
       Set rst = Nothing
    _______________________________________________________________
    VB 中对对象赋值均是引用的,而不是对象的复制.所以:Set ExecuteSQL = rst这句是将函数返回指向rst,(此时ExecuteSQL和rst指向同一内存区域)而你上面退出前将rst给Set nothing了,当然ExecuteSQL也变成了nothing,故会出现"未设置对象变量或With block变量问题"所以泥浆上面Set rst = Nothing屏蔽掉应该就可以了.
      

  5.   

    建议你将数据对象统一封装起来,比如说用DataEnviroment等管理. 另外同样道理,你上面的连接对象断开后( Set cnn = Nothing),数据更新等操作显然不行.所以建议连接对象是封装成全局的,这样就不会有问题.
      

  6.   

    就LZ的代码来看,很多问题都可以造成 “未设置对象变量或With block变量” 这个错误,比如,连接字符串没写对,或者代码中的查询语句没写对等等都会提示这个错误,
    请把 ExecuteSQL 函数中的错误陷阱语句去掉(就是把On Error GoTo ExecuteSQL_Error这句注释掉再运行),调试运行,才能找出正正的错误原因