Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MS Access/VBA中将带参数的SQL用作组合框行源_Vba_Ms Access - Fatal编程技术网

如何在MS Access/VBA中将带参数的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

我想定义并使用带有参数的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 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;"
有关更多信息,请参阅