提问人:tksy 提问时间:10/24/2008 最后编辑:Taryntksy 更新时间:7/17/2013 访问量:13063
如何在访问中运行查询循环?
How to run a loop of queries in access?
问:
我有一个数据库,里面有一个表,里面充满了检查另一个数据库的条件和错误消息。
我想运行一个循环,以便根据第二个数据库中的所有表检查这些条件中的每一个,并生成一个给出错误的报告。
这在 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公司
答:
0赞
Patrick Cuff
10/24/2008
#1
当您说“报告”时,您指的是访问报告,还是写入文件或访问表单可行?
您可以在模块中创建一个函数或子来执行此操作。在 querycrit 表上打开一个记录集,然后动态地浏览记录,为记录表生成和运行 SQL。您可以将这些动态查询的结果写入文件或窗体,或者将结果插入到临时表中,并从那里驱动访问报告。
0赞
Fionnuala
10/24/2008
#2
这是一些示例代码,它是键入的,而不是测试的。
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
0赞
Fionnuala
10/24/2008
#3
“其实有很多记录表 要检查,并非所有查询都可以 在所有表上运行,例如在一个表中 表速度可能不存在 下桌距离可能不在那里。
我认为,正确的想法是创建一个表表和一个查询表联结表,以显示哪些查询将在哪个表上运行,例如:
TableID QueryID
1 4
2 1
2 3
3 1
这可用于对每个表运行正确的查询集。
2赞
Fionnuala
10/24/2008
#4
下面是一些示例代码。它阐释了两种不同类型的记录集的用法。您可能希望阅读 Allen Browne 的 VBA 陷阱:使用记录集和 Access 2002 及更高版本的 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赞
tksy
11/13/2008
在这里,我在 CurrentDb.TableDefs 中的每个 tdf 中收到运行时错误 3734,我已将 tdf 定义为 tabledef
0赞
tksy
11/22/2008
我对这段代码有疑问。假设 RS2 有一个表中的许多记录,那么这将只针对一个记录仪式运行查询,而不是所有记录?
评论