Как запустить цикл запросов в доступе? - PullRequest
0 голосов
/ 24 октября 2008

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

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

Возможно ли это в мс доступе.

Например,

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

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 ]

2 голосов
/ 24 октября 2008

Вот еще пример кода. Это иллюстрирует использование двух различных типов наборов записей. Возможно, вы захотите прочитать VBA Traps: Работа с наборами записей Аллена Брауна и Список зарезервированных слов в 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 голосов
/ 24 октября 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
0 голосов
/ 24 октября 2008

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

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

TableID  QueryID
1           4
2           1
2           3
3           1

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

0 голосов
/ 24 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...