Функция MS Access SQL Switch - PullRequest
       1

Функция MS Access SQL Switch

0 голосов
/ 26 июня 2019

У меня есть несколько таблиц с одинаковой структурой данных (они заполнены кучей вещей, в отдельных файлах .accdb, чтобы учесть ограничение в 2 ГБ), и мне нужно извлечь информацию из одной из них на основе поля в форма.

После исследования я придумал следующее, но, похоже, это не сработает.

SELECT MyNumber, MyName, MyPage, MyDrawing
FROM Switch([Forms]![View_Info]![Contract] = "Contract1", "tblContract1", [Forms]![View_Info]![Contract] = "Contract2", "tblContract2")
WHERE (MyNumber = [Forms]![View_Info]![MyNumber])

Синтаксическая ошибка в предложении FROM. В этом примере я использовал только 4 поля и 2 таблицы, но на самом деле я хочу получить около 9 таблиц и 20 полей в каждой.

Может кто-нибудь пролить свет на это? У меня действительно тяжелые времена с SQL, поэтому я прошу прощения, если это довольно просто.

Заранее спасибо, Рафаэль.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Вы не можете вернуть имя таблицы из функции в предложении SQL FROM. Если ваша таблица определяется динамически, то вы должны динамически создавать командную строку SQL.

Dim tableName As String, sql As String

tableName = Switch(...)
sql = "SELECT ... FROM [" & tableName & "] WHERE ..."

Как @forpas объясняет в своем ответе , вы можете использовать запрос UNION, но он всегда будет запрашивать все таблицы. Поскольку фильтр не основан на столбце таблицы, фильтрация будет выполняться на стороне клиента, т.е. в вашем приложении.

0 голосов
/ 26 июня 2019

Попробуйте это СОЮЗ:

SELECT MyNumber, MyName, MyPage, MyDrawing
FROM tblContract1
WHERE (MyNumber = [Forms]![View_Info]![MyNumber]) AND [Forms]![View_Info]![Contract] = "Contract1"
UNION
SELECT MyNumber, MyName, MyPage, MyDrawing
FROM tblContract2
WHERE (MyNumber = [Forms]![View_Info]![MyNumber]) AND [Forms]![View_Info]![Contract] = "Contract2"

Каждый запрос UNION содержит в предложении WHERE условие:

[Forms]![View_Info]![Contract] = "Contract?"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...