在MS Access accdb VBA中,我如何知道以什么顺序为在需要参数的查询上构建的查询提供参数

时间:2016-05-24 19:34:16

标签: vba ms-access parameters access-vba

在我的VBA子例程中,我想从复杂查询中创建一个新表

(qryA UNION ALL qryB UNION ALL qryC)

strSQL = "select * into tblNew from qryComplex"

后续查询(超过3个首字母)需要在打开的表单中找到的参数(假设为4)。

通过选择,例如,

Set qdf = db.CreateQueryDef("", strSQL)
qdf.Parameters(0) = Forms!frmMain.txtF1
qdf.Parameters(1) = Forms!frmMain.txtF2
qdf.Parameters(2) = Forms!frmMain.txtF3
qdf.Parameters(3) = Forms!frmMain.txtF1
qdf.Execute

我如何知道所需的订单是确定性的?

如何确定订单和内容,而无需深入了解后续查询并尝试组合?

3 个答案:

答案 0 :(得分:1)

Access支持PARAMETERS子句,即使某些/所有参数仅用于基础查询,也可以确定参数的顺序。您只需确保为所有参数命名,并使用正确的名称和类型。 PARAMETERS子句后面必须跟一个分号。

您可以使用Access中的“参数”对话框来帮助您:

enter image description here

enter image description here

假设您的所有参数都需要是短文本,您的查询将如下所示:

PARAMETERS Param1 Text ( 255 ),Param2 Text ( 255 ), Param3 Text ( 255 );
SELECT * INTO tblNew
  FROM qryComplex;

答案 1 :(得分:0)

我使用来自VBA的参数和放置它们的顺序从来都不是问题。您只需要从所有相关查询中说出所有问题。

答案 2 :(得分:0)

使用参数名称而不是索引编号

qdf.Parameters("parameter example name 1") = Forms!frmMain.txtF1
qdf.Parameters("parameter example name 2") = Forms!frmMain.txtF2
qdf.Parameters("parameter example name 3") = Forms!frmMain.txtF3
qdf.Parameters("parameter example name 4") = Forms!frmMain.txtF1