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

问题描述 投票:0回答:1

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

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

我将表名从组合框传递给查询时遇到问题。

我知道它可能不是最好的数据库结构,但它是我需要做的。如果有人有任何建议分享这将是伟大的!

谢谢!

sql ms-access ms-access-2010
1个回答
0
投票

您不能简单地使用预编译的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

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

© www.soinside.com 2019 - 2024. All rights reserved.