代码如下:
Private Sub Form_Load()
  Dim temprecordset As adodb.Recordset
  Dim txtsql As String
  Dim msgtext As String
  Dim i As Integer
  combosex.AddItem "男"
  combosex.AddItem "女"
  combotype.AddItem "硕士"
  combotype.AddItem "博士"
  combotype.AddItem "博士后"
  txtsql = "select name from graduateuser.director_info"
  Set temprecordset = executesql(txtsql, msgtext)
  For i = 1 To temprecordset.RecordCount
    combodirector.AddItem temprecordset.Fields(0)
    temprecordset.MoveNext
  Next i
  temprecordset.Close
End Sub标准模块中的executesql 函数如下:
Public Function executesql(ByVal sql As String, msgstring As String) As adodb.Recordset
  Dim conn As adodb.Connection
  Dim rest As adodb.Recordset
  On Error GoTo executesql_error
  Set conn = New adodb.Connection
  conn.Open connectstring
  Set rest = New adodb.Recordset
  rest.Open Trim$(sql), conn, adOpenKeyset, adLockOptimistic
  Set executesql = rest
  msgstring = "查询到" & rest.RecordCount & "条记录"
executesql_exit:
  Set rest = Nothing
  Set conn = Nothing
  Exit Function
executesql_error:
  msgstring = "查询错误" & _
  Err.Description
  Resume executesql_exit
End Function
运行是说:实时错误91,对象变量或with 块对象未设置的错误。
怎么回事呀?
调试后错误定位在这个位置:
For i = 1 To temprecordset.RecordCount

解决方案 »

  1.   

    应该是”conn.Open connectstring“连接出错,程序跳到executesql_error,再跳到executesql_error退出executesql函数,这时函数内rest没有赋值,executesql也就没有赋值。
    建议调试时把On Error GoTo —去掉,才看得到错误原因
      

  2.   

    你可以试一试:
    Dim temprecordset As adodb.Recordset
    set temprecordset=new adodb.Recordset
    txtsql = "select name from graduateuser.director_info"
    temprecordset.open conn,txtsql
    For i = 1 To temprecordset.RecordCount
        combodirector.AddItem temprecordset.Fields(0)
        temprecordset.MoveNext
    Next i
    temprecordset.Close
    当然conn要为全局变量