Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/48: Рейтинг темы: голосов - 48, средняя оценка - 4.79
2 / 2 / 0
Регистрация: 12.12.2014
Сообщений: 87
1

Как поместить несколько запросов в одном запросе MS Access?

11.12.2015, 10:18. Показов 9954. Ответов 18
Метки нет (Все метки)

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

Могу ли я в один "запрос" MS Access поместить текст нескольких запросов, например:

SQL
1
2
3
4
5
6
7
8
9
CREATE TABLE (...) ;
 
INSERT INTO (...) ;
 
CREATE TABLE (...) ;
 
INSERT INTO (...) ;
 
DROP TABLE (...)
И вот я запускаю один этот запрос, и он последовательно выполняет все эти команды.

Это нужно, чтобы избавиться от кучи промежуточных запросов в списке слева (группирование мне также не удобно).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2015, 10:18
Ответы с готовыми решениями:

Как обьединить несколько replace в одном запросе
Как обьединить несколько replace в одном запросе, чтобы столбце менять, 4, 5 а то 8 значений

Как отправить несколько ПОСТ запросов при одном нажатии.
Нужно сделать так: В текстБокс вводим нужное кол-во отправляемых запросов. Нажимаем на баттон1...

как правильно сделать в одном запросе может быть несколько подзапросов
Народ подскажите как правильно сделать запрос SELECT id,title FROM table (IN SELECT cat...

Несколько запросов в одном
Можно ли сделать несколько запросов в одном? Например вот есть 2 таблицы и более с одинаковыми...

18
Эксперт MS Access
6644 / 4253 / 264
Регистрация: 12.08.2011
Сообщений: 12,372
11.12.2015, 10:25 2
Поместите на кнопку на форму и запускайте сколько хотите.
0
2 / 2 / 0
Регистрация: 12.12.2014
Сообщений: 87
11.12.2015, 10:31  [ТС] 3
Для того, чтобы их поместить на кнопку, все эти "CREATE TABLE", "INSERT INTO" и т. п. всё равно должны быть записаны каждый в отдельном запросе. А именно в этом и есть проблема, т.к. в огромном количестве промежуточных запросов в списке слева часто приходится очень долго искать нужную таблицу.
0
Эксперт MS Access
6644 / 4253 / 264
Регистрация: 12.08.2011
Сообщений: 12,372
11.12.2015, 10:56 4
Цитата Сообщение от Thor Посмотреть сообщение
всё равно должны быть записаны каждый в отдельном запросе
не правда
0
2 / 2 / 0
Регистрация: 12.12.2014
Сообщений: 87
11.12.2015, 11:08  [ТС] 5
alvk, поясните?
0
894 / 284 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
11.12.2015, 11:16 6
Насколько я понимаю, Вы хотите, чтобы "слева", т.е. там, где все таблицы/запросы/формы (забыл, как эта самая область называется)) - не было "промежуточных" запросов? То есть чтобы вообще в базе их не было в виде запросов? Так создайте тогда код на VBA, в котором используйте CurrentDb.Execute, и посадите этот код на кнопку на форме, например. То есть что-то вроде:

Visual Basic
1
2
3
4
5
6
Private Sub Кнопка_Click
    CurrentDb.Execute "SQL-текст запроса 1"
    CurrentDb.Execute "SQL-текст запроса 2"
    CurrentDb.Execute "SQL-текст запроса 3" и т.д.
 
End Sub
То есть по клику на данной кнопке по очереди будут выполнены все Ваши запросы, при этом их не будет в области переходов, они будут "жить" только в коде этой кнопки.
1
2 / 2 / 0
Регистрация: 12.12.2014
Сообщений: 87
11.12.2015, 11:33  [ТС] 7
Kkarn, я бы хотел запихнуть в один "запрос" из меню слева сразу несколько SQL-запросов, например, через какой-либо разделитель типа ";". Пытался методом проб и ошибок обнаружить, есть ли в access'е такой разделитель, но так и не смог его найти. И видимо функционал access этого не позволяет.

Я пробовал делать так, как вы предлагаете, но основная трудность здесь в том, что запросы очень сложно становится править, и даже просто читать.
0
894 / 284 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
11.12.2015, 11:45 8
Thor, Мне кажется, что "запихнуть в один" точно не получится. Вы, по сути, хотите, чтобы при клике на ОДНОМ запросе слева - выполнялось сразу несколько, так? Но сама суть запросов предусматривает их определенную структуру, способ отображения в окне конструктора и т.д. Запрос на СОЗДАНИЕ таблицы - это ОДИН запрос, и "соединить" его как-то с запросом, например, на УДАЛЕНИЕ - это явно не выйдет. Все равно что в одной кастрюле смешать, первое, второе и компот))).
Если суть проблемы именно в том, чтобы по одному клику выполнять несколько запросов - напишите в конце концов макрос для поочередного выполнения запросов, да и кликайте на нем, а не на "объединенном запросе". А от наличия самих запросов в области переходов Вы не избавитесь, если хотите также иметь возможность их исправлять и т.д.
Или сделайте себе в области переходов разные там группировки, чтобы в определенном представлении отображались только нужные запросы, что ли...
1
Модератор
Эксперт MS Access
10044 / 4058 / 654
Регистрация: 07.08.2010
Сообщений: 11,389
Записей в блоге: 3
11.12.2015, 13:03 9
Я пробовал делать так, как вы предлагаете, но основная трудность здесь в том, что запросы очень сложно становится править, и даже просто читать.
У меня же возник другой вопрос --насколько отличаются запросы?
если это выбор цехов 1,2,3,4,5,....... или отчет за месяц 1,2,3,4,5,6,1кв,2кв,1полугод,,,,,,,
то может достаточно одного запроса с параметром или функции, настраивающей подобный запрос

я встречала базу, в которой было более 500 запросов подобного вида
0
шапоклякистка 8-го дня
3657 / 2218 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.12.2015, 13:38 10
Лучший ответ Сообщение было отмечено Thor как решение

Решение

Thor, храните текст запросов в таблице; открывате рекордсет, перебираете записи и выполняете.

Добавлено через 4 минуты
Скажем, таблица QryPack (ID, PackName, OrdNo, SQL)

Visual Basic
1
2
3
4
5
set rst = currentdb.openrecordset("select SQL from QryPack where PackName='Пакет1' order by OrdNo")
do until rst .EOF
    currendb.execute rst!SQL
    rst.movenext
loop
Добавлено через 1 минуту
ps: код писала из головы, прошу простить, если ошибки - это просто чтобы идею объяснить.
2
894 / 284 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
11.12.2015, 13:54 11
texnik-san, Прикольная идея) Хотя, конечно, тоже не то, что хочет ТС, но красиво. Хотя здесь, мне кажется, тоже будет "неудобно исправлять запросы". Точнее, в плане удобства будет точно так же, как и в том варианте, что я предложил изначально...
0
шапоклякистка 8-го дня
3657 / 2218 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.12.2015, 14:20 12
Цитата Сообщение от Kkarn Посмотреть сообщение
Хотя здесь, мне кажется, тоже будет "неудобно исправлять запросы".
Если захотеть, то и с этим можно справиться. На таблице всегда можно создать форму, на форме - кнопку, которая будет копировать текст SQL текущей записи в специально созданный для этой цели запрос базы данных и открывать этот запрос в режиме конструктора; и еще одну кнопку - для обратного копирования из этого запроса в поле SQL текущей записи.

На самом деле, я подобные методы пакетного запуска запросов давно использую, но у меня оно "с осложнениями", поэтому в качестве примера не выложишь (много лишнего).
1
Эксперт MS Access
26634 / 14327 / 3172
Регистрация: 28.04.2012
Сообщений: 15,707
11.12.2015, 14:22 13
Kkarn, в контексте идеи texnik-san несложно сделать форму, помещать в текстбоксы текст запросов, править их и выполнять уже SQL-текст из полей.

Применяя обработку ошибок, можно сделать и откаты при незавершенной транзакции, например при неверном синтаксисе или логике запроса. В том числе и для запросов DDL (CREATE TABLE, DROP TABLE, ALTER TABLE)
2
894 / 284 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
11.12.2015, 15:12 14
mobile, texnik-san, Как красиво рождаются идеи!) Мне кажется, даже сам ТС не подразумевал того, что здесь у нас насочинялось))...
0
3 / 3 / 1
Регистрация: 11.12.2015
Сообщений: 28
11.12.2015, 15:36 15
texnik-san, Ирин, подскажите как с Вами связаться? 759@mail.ru
0
шапоклякистка 8-го дня
3657 / 2218 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.12.2015, 16:17 16
НЕ надо со мной связываться. Есть форум, общаемся. Заказов в ближайшие полгода я не беру (уже есть), работу не ищу.
0
Модератор
Эксперт MS Access
10044 / 4058 / 654
Регистрация: 07.08.2010
Сообщений: 11,389
Записей в блоге: 3
11.12.2015, 16:26 17
я тоже многие статистический формы делала таблицей запросов с возможностью настройки выбора

например
--выполнение по порядку номеров
--просмотр итоговой таблицы по сортировке

№№назначение запросашаблон запросапараметрысортировкапримечание
1создание таблицы для отчета  100 
2формирование итога 1select … where mec=[mm]1112 
      
4формирование итога 2select … where mec=[mm]2114 
      
6формирование итога 3select … where mec=[mm]3116 
      
8сумма 1+2+32+4+6 111 
9доля 1 от суммы2/8 113 
10доля2 от суммы4/8 115 
11доля 3 от суммы6/8 117 
1
Эксперт MS Access
6644 / 4253 / 264
Регистрация: 12.08.2011
Сообщений: 12,372
14.12.2015, 09:23 18
Цитата Сообщение от texnik-san Посмотреть сообщение
храните текст запросов в таблице
А кавычки? Нормально без них съестся?

Добавлено через 1 минуту
Цитата Сообщение от Kkarn Посмотреть сообщение
что здесь у нас насочинялось)
Это называется метаданные
1
шапоклякистка 8-го дня
3657 / 2218 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
14.12.2015, 09:26 19
Цитата Сообщение от alvk Посмотреть сообщение
А кавычки? Нормально без них съестся?
Не хуже, чем из текстовой переменной )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2015, 09:26

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Несколько запросов в одном
Как можно добавить в одну таблицу строку и сразу же обновить строку в другой таблице, передав...

Несколько запросов в одном событии
Доброго здоровья всем. Есть нужно выполнить сразу несколько SQL-запросов при нажатии кнопки. Суть:...

Поместить несколько qwtplot на одном окне
Здравствуйте! Подскажите, как правильно разместить несколько qwtplot на одном окне? я создал...

Несколько IN () в одном запросе
Можно ли использовать несколько IN () в одном запросе, и как правильно это делать? Можно в in ()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.