powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как передать запросу имя таблицы параметром?
15 сообщений из 15, страница 1 из 1
как передать запросу имя таблицы параметром?
    #32237872
Yur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yur
Гость
То есть существует несколько схожих групп таблиц.
Как избежать написание нескольких одинаковых запросов (по запросу для каждой группы), которые будут отличаться только именами таблиц?
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237875
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо полагать, что "схожие" есть "одинаковые"
Отсюда вопрос: почему бы не завести одну таблицу и не парить мозги ни себе не людям?
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237890
NoRoV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хороший топик. Я сам когда-то задавался таким вопросом (у меня годовые таблицы разные, различие в названии - год). Ответа не нашел. Но можно используя команду Execute или напрямую используя переменную:
set Tbl=currentdb.openrecorbset(SQLStr,dbOpenDynaset)
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237894
Yur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yur
Гость
Дело в том, что под группой понимается куча таблиц с разной структурой (в каждой группе по 15 разных таблиц). Склеивать соответствующие (одинаковые по полям) таблицы разных групп (для того, чтобы забабахать обработку всего массива одним запросом) нельзя в силу нарушения логики информации. Посему - подскажите пожалуйста, как передать запросу имена таблиц параметрами?
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237905
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, например, программно редактировать текст запроса. Или, еще проще, сделать промежуточный запрос select * from mytable1, в твоем запросе ссылаться на него, а при изменении таблицы просто подменять этот запрос на select * from mytable2.
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237906
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри
я не заметил слово "групп" :)
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237908
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как Параметром не знаю. А переопределить SQL запроса программно можно с помощью QueryDefs
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237918
Nick987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если под запросом понимать сохраненный запрос, то, видимо, никак. А если по запросом понимать строку с SQL-запросом, то ответ очевиден.
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237990
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает програмно менять текст сохранённого запроса?
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32237996
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты имеешь ввиду написать сколько нужно запросов и подставлять их, то этот вариант не отвечает на вопрос:
Как избежать написание нескольких одинаковых запросов (по запросу для каждой группы), которые будут отличаться только именами таблиц
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32238017
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Есть решение.

Код: plaintext
1.
2.
3.
PARAMETERS p Short;
SELECT First(Choose(p,t1.a,t2.a,t3.a)) AS a, First(Choose(p,t1.b,t2.b,t3.b)) AS b
FROM t1, t2, t3
GROUP BY Choose(p,t1.cou,t2.cou,t3.cou);


Правда, у него куча недостатков:

1. Работает медленно.
2. Требует наличия ключа в каждой из таблиц, причем во всех таблицах ключ должен состоять из одинакового числа полей (в моем примере поле одно и оно названо cou).
3. Выдает нередактируемый набор данных.

На мой взгляд, решение Geo от 16:49 лучше.
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32238028
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
На всякий случай расшифровываю. Если подставить, например, p=1, то запрос сработает так, как будто написано:

Код: plaintext
1.
2.
SELECT First(t1.a) AS a, First(t1.b) AS b
FROM t1, t2, t3
GROUP BY t1.cou;


То есть для каждой записи таблицы t1 будет выдана одна запись, и в ней соответствующие поля той же таблицы. Таблицы t2 и t3 приплетены почем зря - на скорость действия запроса влияют, а в конечном результате не участвуют.
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32238091
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно повторю кого-нибудь:

*сформировать в VBA строку запроса SSS, где вместо имен таблиц - строковые переменные.

в нужном месте присвоить переменным нужные значения - имена таблиц

далее удаляется запрос(ы) ХХ

далее (не помню точно текст команд) сохраняется запрос под именем ХХ полученный с помощью строки SSS.

запускается отчет или форма на основании запроса ХХ.

форма или отчет могут использоваться до тех пор пока не произойдут действия*

если имена таблиц отличаются только годом строку SSS можно формировать испоьзуя только один параметр - год.
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32238127
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Еще один недостаток моего решения. Оказалось, что если в одной из таблиц нет данных, то этот запрос всегда возвращает 0 записей.

Для компенсации предлагаю (это первая версия, ее можно совершенствовать) создать таблицу OneLine той же структуры, что и t1, t2, t3, но с гарантированной одной записью, причем дать ключу значение, которое в настоящих данных не встречается, и писать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PARAMETERS p Short;
SELECT First(Choose(p,t1.a,t2.a,t3.a)) AS a, First(Choose(p,t1.b,t2.b,t3.b)) AS b
FROM
[select * from t1 union select * from OneLine]. AS t1,
[select * from t2 union select * from OneLine]. AS t2,
[select * from t3 union select * from OneLine]. AS t3
GROUP BY Choose(p,t1.cou,t2.cou,t3.cou)
HAVING Choose(p,t1.cou,t2.cou,t3.cou) Not In (select cou from OneLine);


***

А вот совсем другое решение, гораздо более простое.

1. Делаем запрос, называем его U:

Код: plaintext
1.
2.
3.
4.
select *,  1  as t from t1
union
select *,  2  as t from t2
union
select *,  3  as t from t3;


(Вместо * можно перечислить нужные поля.)

2. Делаем второй запрос:

Код: plaintext
1.
PARAMETERS p Short;
select * from U where t=p


И это все, и оно работает без проблем.
...
Рейтинг: 0 / 0
как передать запросу имя таблицы параметром?
    #32238228
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ко второму решению вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
PARAMETERS p Text;
SELECT * FROM [
select *,  "t1"  as t from t1
union
select *,  "t2"  as t from t2
union
select *,  "t3"  as t from t3
]. AS U
WHERE t=p;


Во-первых, одним запросом, во-вторых, в параметр передается именно имя таблицы, как и было заказано, а не номер.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как передать запросу имя таблицы параметром?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]