如何将返回的函数中的ADODB记录集应用于表单

问题描述 投票:1回答:1

我有一个刚刚创建的函数,以便可以对查询进行参数化。

下面是使用的功能:

Public Function getLOTSRSTparam(strSQL As String, paramValue As Variant, _
                                Optional skip As Boolean) As ADODB.Recordset

    Dim Cn As ADODB.Connection
    Dim Cm As ADODB.Command
    Dim Pm As ADODB.parameter
    Dim RS As ADODB.Recordset
    Set db = CurrentDb

Set Cn = New ADODB.Connection
Cn.Open Right(LCon, Len(LCon) - 5)
Set Cm = New ADODB.Command
With Cm
    .ActiveConnection = Cn
    .CommandText = strSQL
    .CommandType = adCmdText

    For i = LBound(paramValue) To UBound(paramValue)
        .Parameters.Append .CreateParameter("ChemID", GetParameterType(paramValue(i)), adParamInput, Len(Nz(paramValue(i), " ")), paramValue(i))
    Next i

        Set getLOTSRSTparam = .Execute
  End With

End Function

由于多种原因和很多查询,我将使用此函数,但是返回的ADODB记录集在以前用作表单的记录集时会出错。

strSQL = "SELECT * FROM Person WHERE person.firstname LIKE ? AND person.lastname LIKE ? Order by person.lastname asc, person.firstname asc"

        Dim arrValue As Variant
        Dim qStrLastName As String
        Dim qStrFirstName As String
        qStrLastName = strLastName & "%"
        qStrFirstName = strFirstName & "%"

        arrValue = Array(qStrFirstName, qStrLastName)

        Set lotsRS = getLOTSRSTparam(strSQL, arrValue)
        If lotsRS.EOF Then

            MsgBox "No patients found, try again", vbExclamation, "Error"
            Forms!frmMediDrop.NavigationSubform.Form.txtpatient.SetFocus
            DoCmd.Close acForm, "frmPxSearch"
            Exit Sub
        Else
           Do Until lotsRS.EOF
               Debug.Print lotsRS!firstName & " " & lotsRS!lastName
               lotsRS.MoveNext
            Loop
            Set Me.subfrmPxSearchList.Form.Recordset = lotsRS
        end if

如您所见,我确实进行了遍历和调试,是的,它返回的记录集作为名称都在立即窗口中弹出...但是,当我到达最后一行时,我得到了:]

您输入的对象不是有效的Recordset属性(7965)

我不知道从哪里去,因为我对DAO记录集比较有经验,但是它们似乎无法使用MYSQL和ODBC传递来进行参数化查询。

任何建议都很好,谢谢

我有一个刚刚创建的函数,以便可以对查询进行参数化。下面是使用的函数:公共函数getLOTSRSTparam(strSQL作为字符串,paramValue作为变量,_ ...

vba ms-access adodb recordset
1个回答
1
投票

我在这里找到了答案:Answer here

© www.soinside.com 2019 - 2024. All rights reserved.