如何在访问中运行查询循环?

问题描述:

我有一个数据库,其中充满了用于检查另一个数据库的条件和错误消息。如何在访问中运行查询循环?

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

这是可能的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

这里是一些更多的示例代码。它演示了两种不同类型的记录集的使用。您不妨阅读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 
+0

这里我得到一个运行时错误3734在 对于每个TDF在CurrentDb.TableDefs 我已经定义为TDF tabledef的 – tksy 2008-11-13 12:45:50

当你说“报告”,你的意思Access报表,或将写入文件或访问表单的工作?

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

以下是一些示例代码,它是键入的,未经测试。

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 

“其实有很多记录表 进行检查,而不是所有的查询可以 对所有表在一个 表的速度运行,对于如可能不会出现在 邻桌的距离不在那里。“

正确的认为做,我想,是创建表的表和查询其上表中可以运行一个查询表接线表显示,例如:

TableID QueryID 
1   4 
2   1 
2   3 
3   1 

这可以用来在每个表上运行正确的一组查询。