您不能在WHERE
查询的子句中使用表名(可能有一种很老套的方法,但无论如何都不鼓励这样做)。
如果要从多个表中的 1 个表中选择数据,最好的办法是使用 VBA 动态生成 SQL。执行此操作的一种方法(特别是如果您希望/需要在数据表视图中为最终用户打开查询)是有一个“虚拟”查询,您可以使用表单选择填充其 SQL。
例如,假设我们有 2 个表:tTable1
和tTable2
. 这两个表都有一个名为Language
. 您希望用户使用可选过滤器从第一个或第二个表中选择数据。
- 创建一个包含 2 个组合框的表单:一个用于表格,一个用于标准选择。听起来您已经完成了这一步。
在此表单上有一个用于打开查询的按钮。此按钮press
事件的代码应如下所示:
Private Sub cmdRunQuery_Click()
Dim sSQL As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
If Not IsNull(Me.cboTableName.Value) Then
sSQL = "SELECT * FROM " & Me.cboTableName.Value
If Not IsNull(Me.cboFilter.Value) Then
sSQL = sSQL & vbNewLine & _
"WHERE Language=""" & Me.cboFilter & """"
End If
Set db = CurrentDb
Set qdf = db.QueryDefs("qDummyQuery")
qdf.SQL = sSQL
DoCmd.OpenQuery qdf.Name
End If
End Sub
请注意 SQL 是如何生成的。当然,使用这种方法,您需要保护自己免受 SQL 注入:您应该只允许组合框中的预定义值。但这可以作为概念证明。
如果您不需要显示查询结果,则不需要使用虚拟查询:您可以只打开基于 SQL 的记录集并对其进行处理。