0

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

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

这在 ms 访问中是否可能。

例如,

查询语句表

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

4

4 回答 4

2

这是更多示例代码。它说明了两种不同类型的记录集的使用。您可能希望阅读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
于 2008-10-24T13:09:23.737 回答
0

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

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

于 2008-10-24T11:01:45.707 回答
0

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

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
于 2008-10-24T11:20:50.957 回答
0

“实际上有许多记录表需要检查,并不是所有的查询都可以在所有表​​上运行,例如在一个表中可能没有速度,而在下一个表中可能没有距离。”

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

TableID  QueryID
1           4
2           1
2           3
3           1

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

于 2008-10-24T12:12:11.857 回答