只是一个问题。情况如下:
我有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的新功能,感谢您的耐心等待。
答案 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