我正在研究一个由多个具有相同结构的表组成的访问数据库。我想要做的是使用表单上的组合框来选择表,然后使用所选的表名执行查询。
除了正在使用的表名之外,查询将是相同的。
我无法将表名从组合框传递给查询。
我知道它可能不是最好的数据库结构,但它是我需要做的。如果有人有任何建议分享这将是伟大的!
谢谢!
答案 0 :(得分: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
保存表单,关闭它,编译代码以查找任何错误。然后运行代码。希望这可以帮助。