如何在MS Access/VBA中将带参数的SQL用作组合框行源
我想定义并使用带有参数的SQL字符串作为表单组合框的行源。我使用参数是为了防止SQL注入 我的SQL定义如下:如何在MS Access/VBA中将带参数的SQL用作组合框行源,vba,ms-access,Vba,Ms Access,我想定义并使用带有参数的SQL字符串作为表单组合框的行源。我使用参数是为了防止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 W
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的行源,使用此SQL的结果的正确方法是什么!myComboBox.RowSource
按照目前的编码方式,以下方法可以工作,但我希望在构建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!CompID = compID
strSql = "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = TempVars!CompID ORDER BY CREATION_DATE;"
有关详细信息,请参阅。不幸的是,您不能直接在行源中使用参数 但是,您可以在querydef中使用参数,使用该参数创建记录集,并使用该记录集填充组合框,例如:
With CurrentDb.CreateQueryDef("", strSql)
.Parameters!CompanyID = compID
Set myCombobox.Recordset = .OpenRecordset
End With
您还可以在行源中使用临时变量或基于表单的参数,例如
TempVars!CompID = compID
strSql = "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = TempVars!CompID ORDER BY CREATION_DATE;"
有关更多信息,请参阅