Оптимизация 300 запросов на добавление с использованием отдельной таблицы со списком критериев и циклами или циклами - PullRequest
0 голосов
/ 26 января 2019

У меня есть процесс, который в настоящее время требует 300 отдельных запросов, добавленных в одну основную таблицу. Каждый запрос имеет одинаковую структуру, но разные критерии для [Имя клиента] и [Имя продукта]. Я хотел бы оптимизировать эту базу данных и в идеале иметь 1 главный запрос, который ссылается на таблицу, содержащую критерии каждого запроса. Что-то вроде этого: Таблица критериев

[Имя запроса] | [Имя клиента] | [Название продукта]

Критерии1 | Боб или Синди | Молотки или гвозди или пилы

Критерии2 | Боб или Джек | Винты или Болты

... Criteria300

Таким образом, главный запрос будет выполнен один раз, введя из Criteria1 и отфильтровав, чтобы добавить только результаты, содержащие Боба или Синди, Молотки или Гвозди или Пилы. После завершения Критерии 1 процесс в идеале будет автоматически переходить к Критерии2 и так далее, пока я не доберусь до Критерии300. Я не очень разбираюсь в VBA, поэтому обычно я пишу запросы с использованием Design View. Возможно ли что-то вроде моего приведенного выше описания? Или я думаю об этом не так?

1 Ответ

0 голосов
/ 26 января 2019

Так как это та же структура из двух таблиц ???

Хорошо, я бы построил таблицу с такой структурой: enter image description here

Итак,Вы просто вводите это в таблицу для 300 критериев

Например:

enter image description here

Обратите внимание, что мы вводим кавычки вокругкаждая текстовая часть.

Теперь в коде мы идем:

Sub MyAppend()

  Dim strSQL        As String
  Dim strWhere      As String
  Dim rstCriteria   As DAO.Recordset

  strSQL = "INSERT INTO MyMaster " & _
           "SELECT * from SourceTable "

  Set rstCriteria = CurrentDb.OpenRecordset("tblSQL")

  Do While rstCriteria.EOF
     strWhere = "WHERE Person in (" & rstCriteria!PeopleList & ")" & _
     " AND PartName in (" & rstCriteria!PartsList & ")"

     Debug.Print "working on " & rstCriteria!ID

     CurrentDb.Execute strSQL & strWhere
     rstCriteria.MoveNext
  Loop
  rstCriteria.Close

  Beep
  MsgBox "done"

End Sub

Выше приведен воздушный код, но он должен работать.

Редактировать

Начать с данного шага в списке

Если вы хотите запустить, скажем, последние 50 из 300, то вы можете пойти:

  strSQL = "select * from tblSQL where id >= 250 " & _
           "ORDER BY ID"
  Set rstCriteria = CurrentDb.OpenRecordset(strSQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...