我做了一个模块,专门做为数据库连接或者断开时使用,但老是提示错误如下“编译错误!参数不可用”
我的代码如下,请各位帮忙看看,刚开通帐户没什么可用分还请见凉,
以下为ADO连接模块的语句:
Private cnn As New ADODB.ConnectionPublic Sub DBconnect()
  cnn.ConnectionString = "Provider = microsoft.jet.oledb.4.0;persist security info = false;data source = " & PJPath & "\Inbound Data System.mdb;jet oledb:DataBase password = "  
  cnn.Open  
End SubPublic Sub DBDisconnect()
  cnn.Close
  Set cnn = Nothing
End SubPublic Function rs(ByVal sqlstmt As String) As ADODB.Recordset
Dim rst As New ADODB.Recordset 
  DBconnect
  Set rst.ActiveConnection = cnn
    rst.Open sqlstmt
  Set rs = rst  
End Function以下为主程序调用的过程,到了"If Not rs.EOF Then"就提示错误了:
Public Sub CN_QF() 'select [DMQY NO]
On Error Resume Next
  
  sql_f = "Select distinct[DMQY NO] from [fabric details]"
  sql_t = "Select distinct[DMQY NO] from [Packing List]"  rs (sql_f)
  If Not rs.EOF Then
    Label_DMQYNO.Caption = CStr(rs(0).Value)
    Lab_Res.Caption = CStr(rs(0).Value)
  Else: rs (sql_t) 'Set rs = conn.Execute(sql_t)
    Label_DMQYNO.Caption = CStr(rs(0).Value)
    Lab_Res.Caption = CStr(rs(0).Value)
  End Ifrs.Close
Set rs = Nothing
DBDisconnect
   
End Sub

解决方案 »

  1.   

    rs (sql_f)
    改成
    rs.open sql_f
      

  2.   

    http://download.csdn.net/detail/veron_04/3827200
      

  3.   

    Private cnn As New ADODB.ConnectionPublic Sub DBconnect()
      cnn.ConnectionString = "Provider = microsoft.jet.oledb.4.0;persist security info = false;data source = " & PJPath & "\Inbound Data System.mdb;jet oledb:DataBase password = "   
      cnn.Open   
    End SubPublic Sub DBDisconnect()
      cnn.Close
      Set cnn = Nothing
    End SubPublic Function OpenRS(ByVal sqlstmt As String) As ADODB.Recordset
    Dim rst As New ADODB.Recordset  
      DBconnect
      Set rst.ActiveConnection = cnn
      rst.Open sqlstmt
      Set rs = rst   
    End Function以下为主程序调用的过程,到了"If Not rs.EOF Then"就提示错误了:
    Public Sub CN_QF() 'select [DMQY NO]
    On Error Resume Next
      dim rs as adodab.recordset
      sql_f = "Select distinct[DMQY NO] from [fabric details]"
      sql_t = "Select distinct[DMQY NO] from [Packing List]"  set rs=openrs (sql_f)
      If Not rs.EOF Then
      Label_DMQYNO.Caption = CStr(rs(0).Value)
      Lab_Res.Caption = CStr(rs(0).Value)
      Else: rs (sql_t) 'Set rs = conn.Execute(sql_t)
      Label_DMQYNO.Caption = CStr(rs(0).Value)
      Lab_Res.Caption = CStr(rs(0).Value)
      End Ifrs.Close
    Set rs = Nothing
    DBDisconnect
        
    End Sub
      

  4.   


    回五楼,加了"dim rs as adodab.recordset"在主程序中,是不会报错,但此函数并没有发挥作用,还有,在函数rs中已经定义了rs 为new adodb.reocrdset对象了,为什么在此处还要定义呢?
      

  5.   


    dim rs as adodab.recordset在预先定义的函数rs中已经声明过了,为何在这里还要最次声明? 加上这个声明后,程序是没报错了,但是这个函数并不能实现功能,计算不出所要的结果,
      

  6.   

    你原先声明的rs是一个函数,不是一个对象,我给你改了个函数名,下面代码没漏改个地方:Public Function OpenRS(ByVal sqlstmt As String) As ADODB.Recordset
    Dim rst As New ADODB.Recordset   
      DBconnect
      Set rst.ActiveConnection = cnn
      rst.Open sqlstmt
      Set openrs = rst   
    End Function
      

  7.   


    你好,改过了,还是一样的错误提示,我在想是不是预先定义好recordset为函数,在主程序直接调用recordset函数,这种方法行不通,
    还有,你改的openrs和rs有什么区别,应该都只是函数名吧?看不出是对象哦,
      

  8.   

    找到原因了,
    在主程序中,要先定义rs as new adodb.recordset
    正面最用set rs = openrs(sqlstmt)
    谢谢各位!