Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access querydfs返回~sq_rrptStatTabRout_Ms Access_Vba_Ms Access 2007 - Fatal编程技术网

Ms access querydfs返回~sq_rrptStatTabRout

Ms access querydfs返回~sq_rrptStatTabRout,ms-access,vba,ms-access-2007,Ms Access,Vba,Ms Access 2007,情况: 我需要查找每个查询的第一个字段。创建下面列出的代码并执行后,我收到以下Debug.Print: ~sq_rrptStatTabRout qryBridgeSub qryCentTabRout 我本来希望最后两个会打印出来,但我不太清楚为什么第一个会打印出来,因为rptstatabrout作为报告存在于数据库中 问题:有没有简单的方法来解释这个问题或消除它 代码: Private Sub Command47_Click() Dim db As DAO.Database Dim rs As

情况: 我需要查找每个查询的第一个字段。创建下面列出的代码并执行后,我收到以下
Debug.Print

~sq_rrptStatTabRout
qryBridgeSub
qryCentTabRout
我本来希望最后两个会打印出来,但我不太清楚为什么第一个会打印出来,因为
rptstatabrout
作为报告存在于数据库中

问题:有没有简单的方法来解释这个问题或消除它

代码:

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
条件忽略它们

如果不是query.Name,比如“~*”那么
'找到第一个字段
如果结束
注意:如果要将计算限制为仅
选择
查询,请检查每个查询的
。键入
属性。
SELECT
查询的类型是dbQSelect(0)。如果要处理其他查询类型,请检查Access“帮助系统”中的QueryDef.Type属性主题

如果您想知道~sq_rrptStatTabRout查询来自何处,请检查rptStatTabRout报告的记录源属性。当源是
SELECT
语句时,Access将该语句保存为隐藏查询。
~
前缀阻止它显示在导航窗格中


当您使用
SELECT
语句作为组合框或列表框的行源时,也会发生同样的情况。

首先,我非常后悔在注意到您运行每个查询之前运行了代码。因为我有50多个问题,所以这是一个有趣的时刻

我修改了您的代码以帮助解释正在发生的事情,代码被限制为10次迭代,因为保存的查询似乎首先显示,并且被从我的即时窗口中推出

Public Function Test()

    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

    Dim i As Integer

    i = 0

    ' loop through each query
    For Each query In queries
        On Error Resume Next

        If i < 10 Then

            Debug.Print query.Name
            Debug.Print query.SQL
            i = i + 1
        End If

    Next


End Function
公共功能测试()
Dim数据库作为DAO.Database
Dim rs作为DAO.Recordset
Dim查询作为DAO.querydfs
Dim查询为DAO.QueryDef
Dim queryname作为字符串
模糊fld为刀场
Set db=CurrentDb
Set querys=db.querydfs
作为整数的Dim i
i=0
'循环遍历每个查询
对于查询中的每个查询
出错时继续下一步
如果我<10,那么
Debug.Print query.Name
Debug.Print query.SQL
i=i+1
如果结束
下一个
端函数
如果运行该命令,您可以看到它在
rptstatabrout
报告中找到的实际SQL。这是因为
querydfs
中的查询比您在导航窗格中看到的查询更多


在您的示例中,请查看报告的
RecordSource
,我怀疑您会找到一个书面查询。它甚至会在组合框的
行source
中找到sql

请注意下一步恢复时出现的
错误。该指令忽略错误,而不让您知道错误发生或原因。在故障排除过程中,信息的缺乏可能是一个严重的障碍。