在 Ms-Access 中将表名作为查询参数传递

Posted

技术标签:

【中文标题】在 Ms-Access 中将表名作为查询参数传递【英文标题】:Passing a table name as a query parameter in Ms-Access 【发布时间】:2014-08-06 15:35:03 【问题描述】:

我正在开发一个由具有相同结构的多个表组成的 access 数据库。我要做的是使用表单上的组合框来选择表,然后使用所选表名执行查询。

除了正在使用的表名之外,查询将是相同的。

我无法将组合框中的表名传递给查询。

我知道它可能不是最好的数据库结构,但它是我需要做的。如果有人有任何建议可以分享,那就太好了!

谢谢!

【问题讨论】:

您能在构建查询的位置显示代码吗?只是不要逃避这个名字...... 我没有什么要展示的。我试图用 sql 来做这件事,因为我的 VBA 技能有点基础。我正在尝试的是 SELECT table.[fieldname],但是在我选择表的地方,我需要传递从名为“tableSelect”的下拉菜单中选择的表名 好吧,您可以使用组合框上的事件onChangeafterUpdate 来访问它的属性并在那里运行查询... t.[fieldname], ... FROM [" & me.combo1 & "] As t希望您对您的用户充满信心。 【参考方案1】:

您不能简单地使用预编译的 SQL 查询来做到这一点。你需要一点 VBA 才能让它运行,这就是你要做的。

创建一个包含一个 ComboBox 和一个按钮的表单。

将 ComboBox 命名为 tableNameCombo,将按钮命名为 runQueryBtn。保存表单,名称为 frm_QueryRun

按照以下方式创建一个新的查询,

SELECT * FROM randomTableName;

将此保存为 qry_Tmp

现在回到表单设计,然后在表单的属性表中,查找当前方法。然后将以下代码粘贴到 Form Current 中。

注意:如果这是您的第一个 VBA,请查看:http://www.baldyweb.com/FirstVBA.htm

Private Sub Form_Current()
    Dim tblStr As String
    Dim dbObj As DAO.Database, tdObj As DAO.TableDef

    Set dbObj = CurrentDB()

    Me.tableNameCombo.RowSourceType = "Value List"
    For Each tdObj In db.TableDefs
        If Left(tdObj.Name, 4) <> "MSys" Then tblStr = tblStr & tdObj.Name & ";"
    Next

    tblStr = Left(tblStr, Len(tblStr)-1)
    Me.tableNameCombo.RowSource = tblStr
    Set dbObj = Nothing
End Sub

完成后,您需要构建 qry_Tmp。类似的,点击按钮。

Private Sub runQueryBtn_Click()
    Dim dbObj As DAO.Database, qdObj As DAO.QueryDef
    If Me.tableNameCombo.ListIndex = -1 Then
        MsgBox "Table Name needs to be selected, before continuing.", vbCritical
        Exit Sub
    End If

    Set dbObj = CurrentDB()
    Set qdObj = dbObj.QueryDefs("qry_Tmp")

    qdObj.SQL = "SELECT " & Me.tableNameCombo & ".* FROM " & Me.tableNameCombo & ";"

    qdObj.Execute dbFailOnError

    qdObj.Close
    Set qdObj = Nothing
    Set dbObj = Nothing
End Sub

保存表单,关闭它,编译任何错误的代码。然后运行代码。希望这可以帮助。

【讨论】:

这真的很有帮助。当我想将列名和表名作为参数传递给 Access SQL 查询时,我遇到了这个问题。你知道这是否可行吗?

以上是关于在 Ms-Access 中将表名作为查询参数传递的主要内容,如果未能解决你的问题,请参考以下文章

在 psycopg2 中将表名作为参数传递

表名作为 PostgreSQL 函数参数

通过将列和表名作为参数传递来创建 BigQuery 存储过程

如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?

存储过程,将表名作为参数传递

将表名作为输入参数动态传递并使用它[重复]