我有一个刚刚创建的函数,以便可以对查询进行参数化。
下面是使用的功能:
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作为变量,_ ...
我在这里找到了答案:Answer here