Как запустить цикл запросов в доступе?

У меня есть база данных с таблицей, полной условий и сообщений об ошибках для проверки другой базы данных.

Я хочу запустить цикл, чтобы каждое из этих условий проверялось по всем таблицам во второй базе данных и генерировало отчет, который дает ошибки.

Возможно ли это в ms access.

Например,

таблица запросов

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

с уважением ТТК


person tksy    schedule 24.10.2008    source источник


Ответы (4)


Вот еще пример кода. Он иллюстрирует использование двух различных типов наборов записей. Вы можете прочитать Ловушки 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
person Fionnuala    schedule 24.10.2008
comment
здесь я получаю ошибку времени выполнения 3734 для каждого tdf в CurrentDb.TableDefs, я определил tdf как tabledef - person tksy; 13.11.2008
comment
у меня есть сомнения в этом коде. предположим, что у rs2 есть несколько записей из таблицы, тогда будет выполняться запрос только к одной записи, а не ко всем записям? - person tksy; 21.11.2008

Когда вы говорите «отчет», вы имеете в виду отчет о доступе или будет работать запись в файл или форму доступа?

Для этого вы можете создать функцию или подпрограмму в модуле. Откройте набор записей в таблице querycrit и просмотрите записи, динамически создав и запустив SQL для таблицы записей. Вы можете записать результаты этих динамических запросов в файл, или форму, или вставить результаты во временную таблицу и оттуда гнать Access Report.

person Patrick Cuff    schedule 24.10.2008

«на самом деле нужно проверить много таблиц записей, и не все запросы могут выполняться для всех таблиц, например, в одной таблице может отсутствовать скорость, а в следующей таблице может отсутствовать расстояние».

Я думаю, что правильно было бы создать таблицу таблиц и таблицу соединения таблиц запросов, которая показывает, какие запросы должны выполняться для какой таблицы, например:

TableID  QueryID
1           4
2           1
2           3
3           1

Это можно использовать для запуска правильного набора запросов для каждой таблицы.

person Fionnuala    schedule 24.10.2008

Вот пример кода, он набран, не тестировался.

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
person Fionnuala    schedule 24.10.2008