我想定义和使用带有参数的SQL字符串作为表单组合框的RowSource。我正在使用PARAMETERS来防止SQL注入。
我的SQL定义如下:
Dim strSql As String, strParm As String
Dim compID As Integer
compID = ...
strParm = "PARAMETERS [CompanyID] INT; "
strSql = strParm & "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = [CompanyID] ORDER BY CREATION_DATE;"
从我阅读的文档中,此类字符串通常与一起使用CreateQueryDef
。
使用值compID
作为组合框(Me!myComboBox.RowSource
)的RowSource来使用此SQL结果的正确方法是什么?
按照目前的编码方式,以下方法可以工作,但是在构建SQL语句时,我想避免字符串连接:
Me!myComboBox.RowSource = "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = " & compID & " ORDER BY CREATION_DATE;
不幸的是,您不能直接在行源中使用参数。
但是,您可以在querydef中使用参数,使用该参数创建记录集,并使用该记录集填充组合框,例如:
With CurrentDb.CreateQueryDef("", strSql)
.Parameters!CompanyID = compID
Set myCombobox.Recordset = .OpenRecordset
End With
您还可以在行源中使用TempVars或基于表单的参数,例如
TempVars!CompID = compID
strSql = "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = TempVars!CompID ORDER BY CREATION_DATE;"
请参阅如何在Microsoft Access的不同上下文中在VBA中使用参数?有关更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句