DoCmd.RunSQL中的VBA变量

时间:2016-08-29 19:48:35

标签: ms-access access-vba

只是一个问题。情况如下:

我有15个make表查询,用于提取索赔中使用的不同提交澄清代码的数据;即提取所有提交澄清代码5的索赔。截至目前,我有一个宏将运行所有15个查询,但每次我需要输入我正在过滤的区域,因为[什么地区?]提示我已经进入了标准领域。

我的问题是:

是否可以使用VBA使用DoCmd.RunSQL运行所有15个查询,我只需要输入一次区号,然后将其应用于所有查询?

我最初的想法是,我会让VBA提示我我要过滤的区域,将其存储在变量中,然后在SQL语句中使用该变量。但我甚至不确定你能不能这样做?提前感谢您提出的任何建议!

更新:所以在阅读了几个主题之后,我创建了一个模拟数据库来尝试一些概念,我想我可能会走上正轨?

Private Sub btnTest_Click()

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim SQLString As String

SQLString = "SELECT tblEmployees.ID, tblEmployees.Last_Name,  tblEmployees.First_Name, tblEmployees.SS_ID INTO Test" _
        & "FROM tblEmployees" _
        & "WHERE (((tblEmployees.ID)=[What number]));"

Set qdf = CurrentDb.QueryDefs("Query1")

qdf.Parameters(0).Value = InputBox("What is the ID Number")

qdf.Execute
qdf.Close

Set db = Nothing
Set qdf = Nothing

End Sub

所以要将它应用于15个查询,我只是将其他变量变为DAO.QueryDef吗?我注意到我确实需要SQLString部分吗?另外,我注意到在运行这个模拟代码时,它需要很长时间才能创建新表。这是正常的吗?此外,如果正在创建的表已存在,则代码将不会运行。有没有办法让代码用新的代码替换现有的表?这个VBA的新功能,感谢您的耐心等待。

1 个答案:

答案 0 :(得分:2)

简短的回答是肯定的,这是可能的。您想要熟悉的一些关键字是“参数”,它们是带有提示和“Querydef”或查询定义的变量。

有很多文章详细介绍了如何以编程方式将参数值传递给查询。查看this页面,详细了解如何完成此操作。最值得注意的是,最后一个示例使用输入框来提示用户提供参数值,这样可以使您接近所需的值。 (即cmd.Parameters(0).Value = InputBox("Enter a country name")

根据您的设计进行修改,最好创建一个字符串变量并首先请求参数,然后使用该变量单独声明参数,这样就可以将单个参数提交应用于所有查询。

修改

我已调整您的代码以向您展示如何进行操作。您将不得不为每个查询重复该块。

Private Sub btnTest_Click()

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strParamter As String

Set db = CurrentDb

strParamter = InputBox("What is the ID Number")

Set qdf = db.QueryDefs("Query1")

qdf.Parameters(0).Value = strParameter

qdf.Execute
qdf.Close

'Now move to next query

Set qdf = db.QueryDefs("Query2")

qdf.Parameters(0).Value = strParameter

qdf.Execute
qdf.Close

'...etc.

Set qdf = Nothing
Set db = Nothing


End Sub