【问题标题】:How to run a loop of queries in access?如何在访问中运行查询循环?
【发布时间】:2008-10-24 10:36:04
【问题描述】:

我有一个数据库,其中的表充满了检查另一个数据库的条件和错误消息。

我想运行一个循环,以便针对第二个数据库中的所有表检查这些条件中的每一个,并生成一个给出错误的报告。

这在 ms 访问中是否可能。

例如,

querycrit 表

id           query                                 error    
1           speed<25 and speed>56              speed above limit  
2           dist<56 or dist >78                dist within limit

我有 400 多个这样的关于不同变量的查询。

我运行查询的表是

记录表

id   speed     dist    accce   decele   aaa   bbb     ccc
1     33        34      44         33   33     33      33
2     45        44      55         55   55     22      23

问候 ttk

【问题讨论】:

    标签: sql ms-access loops


    【解决方案1】:

    这里还有一些示例代码。它说明了两种不同类型的记录集的使用。您不妨阅读 Allen Browne 的 VBA Traps: Working with RecordsetsList of reserved words in Access 2002 and in later versions of Access

    Dim rs As DAO.Recordset
    Dim rs2 As ADODB.Recordset
    
    Set rs = CurrentDb.OpenRecordset("querycrit")
    Set rs2 = CreateObject("ADODB.Recordset")
    rs2.ActiveConnection = CurrentProject.Connection
    For Each tdf In CurrentDb.TableDefs
    'EDIT: TableDefs includes Microsoft System tables and '
    'these should never be tampered with. They all begin with Msys '
    'so we can leave them out of the loop here. '
       If Left(tdf.Name, 4) <> "msys" And tdf.Name <> "querycrit" Then
            rs.MoveFirst
            strSQL = "SELECT * From [" & tdf.Name & "] WHERE "
    
            Do While Not rs.EOF
                On Error Resume Next
                Debug.Print tdf.Name
                rs2.Open strSQL & " " & rs![query]
                If Err.Number = 0 Then
                    On Error GoTo 0
                    If Not rs2.EOF Then
                        Debug.Print rs![Error]
                        Debug.Print rs2.GetString
                    End If
                End If
                Err.Clear
                rs2.Close
                rs.MoveNext
    
            Loop
        End If
    Next
    End Sub
    

    【讨论】:

    • 在这里,我在 CurrentDb.TableDefs 中的每个 tdf 处遇到运行时错误 3734,我已将 tdf 定义为 tabledef
    • 我对这段代码有疑问。假设 rs2 有许多来自表的记录,那么这将只针对一个记录而不是所有记录运行查询?
    【解决方案2】:

    当您说“报告”时,您是指访问报告,还是写入文件或访问表单有效?

    您可以在模块中创建一个函数或子函数来执行此操作。在您的 querycrit 表上打开一个记录集,并通过记录动态构建和运行记录表的 SQL。您可以将这些动态查询的结果写入文件或表单,或将结果插入临时表并从那里驱动访问报告。

    【讨论】:

      【解决方案3】:

      "其实有很多记录表 进行检查,并非所有查询都可以 在所有桌子上运行,例如在一张桌子上 表速可能不存在和不存在 下一张桌子的距离可能不存在。”

      我认为,正确的做法是创建一个表和一个查询表联结表,以显示要在哪个表上运行哪些查询,例如:

      TableID  QueryID
      1           4
      2           1
      2           3
      3           1
      

      这可用于在每个表上运行正确的查询集。

      【讨论】:

        【解决方案4】:

        这是一些示例代码,它是输入的,未经测试。

        Dim rs AS DAO.Recordset
        Dim rs2 AS DAO.Recordset
        
        Set rs=CurrentDB.OpenRecordset("querycrit")
        
        strSQL="SELECT * From Records WHERE "
        Do While Not rs.EOF
           Set rs2=CurrentDB.OpenRecordset(strSQL & rs![Query])
           If Not rs2.EOF Then
               Debug.Print rs![Error]
               Debug.Print rs2.Fields(1)
           End If
        
           rs.MoveNext
        Loop
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-18
          • 2019-05-26
          • 2015-10-13
          • 2018-12-14
          • 2017-06-04
          • 2011-05-24
          • 1970-01-01
          • 2023-03-17
          相关资源
          最近更新 更多