我想构建一个动态SQL查询,可以根据变量从不同的表中读取。
所以我有一个这样的片段:
strSQL = "SELECT a100z.f05, a100z.f10, a100z.f23 ..."
我想使用变量来指定' 100'因为我有许多类似命名的表:a100,a200,a300等等。每个查询只使用一个表,但对于不同的查询则不同。
使用的变量将是另一个查询的字段F的结果。
每次我需要一个特定的表时,我都可以调用单独的查询,但我对如何以这种方式执行操作感兴趣。
这是可能的吗?它应该怎么写?
答案 0 :(得分:3)
您似乎正在使用表名来限定SELECT
子句中的字段名称。考虑使用表名的别名,然后您可以使用该别名限定字段名称。这种方法意味着您可以重用相同的查询,只需要更改FROM
子句中的表名。
像这样......
strSQL = "SELECT t.f05, t.f10, t.f23" & vbCrLf & _
"FROM [YourTable] AS t;"
我不确定该建议与其余代码的结合程度如何;它取决于您使用SELECT
查询的位置和方式。但是,如果它用于打开记录集,例如,您可以使用Replace()
替换表名...
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb
Set rs = db.OpenRecordset(Replace(strSQL, "YourTable", "a100"))
如果Access允许您对表名使用查询参数,这将更容易。不幸的是,Access不允许这种灵活性。
作为一个侧面点,似乎您可能有多个具有相同结构的表。在许多情况下,更好的设计是使用带有附加字段的单个表,您可以使用该表来区分以前包含在单独表中的数据子集。如果在您的情况下可以进行这样的重新设计,您可能会发现查询任务之后更简单。