情况:
我需要查找每个查询的第一个字段。创建下面列出的代码并执行它后,我收到以下 Debug.Print
:
~sq_rrptStatTabRout
qryBridgeSub
qryCentTabRout
我期望打印最后两个,但我不太确定为什么第一个打印出来,因为 rptStatTabRout
确实作为报告存在于数据库中。
问题:有没有一种简单的方法来解释这个问题或消除它?
代码:
Private Sub Command47_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim queries As DAO.QueryDefs
Dim query As DAO.QueryDef
Dim queryname As String
Dim fld As DAO.Field
Set db = CurrentDb
Set queries = db.QueryDefs
' loop through each query
For Each query In queries
On Error Resume Next
queryname = query.name
Debug.Print queryname
Set rs = CurrentDb.OpenRecordset("SELECT * FROM " & queryname & "", dbOpenDynaset)
fld = rs.Fields(0).name
MsgBox fld
Next
End Sub
最佳答案
您似乎想忽略名称以 ~
开头的已保存查询。使用 If
条件忽略它们。
If Not query.Name Like "~*" Then
' find the first field
End If
请注意,如果您希望将计算限制为仅 SELECT
查询,请检查每个查询的 .Type
属性。 SELECT
查询的类型为 dbQSelect (0)。如果您想要处理其他查询类型,请查看 Access 帮助系统中的QueryDef.Type 属性主题。
如果您想知道~sq_rrptStatTabRout查询来自何处,请检查rptStatTabRout报告的记录源属性。当源是 SELECT 语句时,Access 会将该语句保存为隐藏查询。 ~
前缀阻止其显示在导航 Pane 中。
当您使用 SELECT
语句作为组合框或列表框的行源时,也会发生同样的情况。
关于ms-access - QueryDefs 返回 ~sq_rrptStatTabRout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591855/