Это на самом деле довольно большая тема, и таит в себе всевозможные потенциальные проблемы. В книгах Access от среднего до продвинутого уровня есть какой-то раздел, в котором обсуждается «Запрос по форме», где у вас есть несвязанная форма, которая позволяет пользователю выбирать определенные критерии, и которая при выполнении пишет на лету SQL для возврата соответствующие данные.
В любом случае, кроме плоской структуры данных из одной таблицы, это не тривиальная задача, поскольку предложение FROM в SQL зависит от таблиц, запрашиваемых в предложении WHERE.
Несколько примеров некоторых форм QBF из приложений, которые я создал для клиентов:
- Запрос 4 базовых таблиц
- Запрос одного плоского стола
- Запрос к 3 базовым таблицам
- Запрос 6 базовых таблиц
- Запрос 2 базовых таблиц
Первый управляется модулем класса, который имеет свойства, которые отражают критерии, выбранные в этой форме, и который имеет методы, которые пишут предложения FROM и WHERE. Это позволяет чрезвычайно легко добавлять другие поля (если эти поля не взяты из таблиц, отличных от уже включенных).
Самая сложная часть процесса - это написание предложения FROM, так как вы должны иметь соответствующие типы соединений и включать в себя только таблицы, которые содержатся либо в предложении SELECT, либо в предложении WHERE. Если вы добавите что-нибудь еще, вы сильно замедляете свой запрос (особенно если у вас есть внешние соединения).
Но это большая тема, и нет волшебного решения - вместо этого нужно создавать что-то подобное для каждого конкретного приложения. Также важно тщательно протестировать его с пользователями, так как то, что совершенно ясно и понятно для вас, разработчика, часто является чертовски загадочным для конечных пользователей.
Но этот принцип применим не только к QBF!