powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обращение к запросу через VBA
37 сообщений из 37, показаны все 2 страниц
Обращение к запросу через VBA
    #39957232
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, уважаемые форумчане.
В своей базе я сделал запрос, в нем выводятся поля из двух таблиц.
Запрос формируется нормально, но вот при обращении к этому запросу через Recordset получаю сообщение что мало параметров и Требуется 1. Но запрос то заполнен, вот он передо мной и в нем есть записи. ничо не понимаю. К стати проверил, что если в запросе нет условия для отбора записей, то все в порядке и VBA его видит, но при создании условия сразу же слепнет.
Прошу Вашей помощи. Спасибо.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957233
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
получаю сообщение что мало параметров и Требуется 1

почти наверняка проблемы с кавычками для символьных полей поиска и запятыми для дробных числовых
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957236
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
Запрос формируется нормально
Покажите финальный текст запроса. И код, который пытается его выполнить.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957243
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
sql = "SELECT Недееспособные.Фамилия AS Недееспособные_Фамилия, Недееспособные.Имя AS Недееспособные_Имя, Недееспособные.Отчество AS Недееспособные_Отчество, Недееспособные.Статус FROM Недееспособные WHERE Недееспособные.Статус=[действующий]"




Код: vbnet
1.
2.
Dim Record_set As Recordset
Set Record_set = CurrentDb.OpenRecordset(sql)



Есть готовый запрос, сформированный посредством Акса, результат такой же. Условие есть- параметров мало, условия нет- все в порядке.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957247
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто такой [действующий] ?
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957252
[действующий], это параметр, который при открытии запроса на экране у вас запрашивается (разве не так?). А в VBA этот параметр надо либо заменить в строке SQL на требуемое значение (например Статус='действующий'), либо открывать Recordset иначе (используя QueryDef).
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957266
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK,
я бы предпочла поделить строку, для наглядности
Код: vbnet
1.
2.
3.
4.
5.
6.
sql = "SELECT Недееспособные.Фамилия AS Недееспособные_Фамилия,"
sql=sql & " Недееспособные.Имя AS Недееспособные_Имя,"
sql=sql & "  Недееспособные.Отчество AS Недееспособные_Отчество,"
sql=sql & "  Недееспособные.Статус FROM Недееспособные"
sql=sql & "  WHERE Недееспособные.Статус=[действующий]"
debug.print sql



пара секунд и ошибку сразу видно
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957322
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ннет. Не помогло

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim sql As String
sql = "SELECT Недееспособные.Фамилия AS Недееспособные_Фамилия,"
sql = sql & " Недееспособные.Имя AS Недееспособные_Имя,"
sql = sql & "  Недееспособные.Отчество AS Недееспособные_Отчество,"
sql = sql & "  Недееспособные.Статус FROM Недееспособные"
sql = sql & "  WHERE Недееспособные.Статус=[действующий]"
Debug.Print sql


Dim Record_set As Recordset
Set Record_set = CurrentDb.OpenRecordset(sql)



Все таже проблема
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957325
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sql = "SELECT Недееспособные.Фамилия AS Недееспособные_Фамилия,"
sql = sql & " Недееспособные.Имя AS Недееспособные_Имя,"
sql = sql & "  Недееспособные.Отчество AS Недееспособные_Отчество,"
sql = sql & "  Недееспособные.Статус FROM Недееспособные"
'sql = sql & "  WHERE Недееспособные.Статус=[действующий]"
Debug.Print sql


Dim Record_set As Recordset
Set Record_set = CurrentDb.OpenRecordset(sql)



Вот в этом случае все работает прекрасно, НО мне нужно обратиться к запросу с выбранными данными, а не ко всем записям, содержащимся в таблицах.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957328
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK,

это для символьного статуса

Код: vbnet
1.
2.
3.
4.
5.
sql = "SELECT Недееспособные.Фамилия AS Недееспособные_Фамилия,"
sql = sql & " Недееспособные.Имя AS Недееспособные_Имя,"
sql = sql & "  Недееспособные.Отчество AS Недееспособные_Отчество,"
sql = sql & "  Недееспособные.Статус FROM Недееспособные"
sql = sql & "  WHERE Недееспособные.Статус='" & ME.[действующий] & "'"





для числового кода
......
sql = sql & " WHERE Недееспособные.Статус=" & ME.[действующий]
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957329
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз...кто такой
[действующий]
кто он, что он и откуда берется?
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957332
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
Вот в этом случае все работает прекрасно, НО мне нужно обратиться к запросу с выбранными данными, а не ко всем записям, содержащимся в таблицах.

Вам уже 100 раз задали вопрос, кто такой -действующий ???
Если это значение поля , по которому должно быть ограничение , то его нужно взять в кавычки как string , см. сдесь :
https://www.sql.ru/faq/faq_topic.aspx?fid=157
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957337
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan
PavelPK
Вот в этом случае все работает прекрасно, НО мне нужно обратиться к запросу с выбранными данными, а не ко всем записям, содержащимся в таблицах.

Вам уже 100 раз задали вопрос, кто такой -действующий ???
Если это значение поля таблицы , по которому должно быть ограничение , то его нужно взять в кавычки как string , см. сдесь :
https://www.sql.ru/faq/faq_topic.aspx?fid=157
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957338
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bubucha,

Есть поле в таблице "Статус" называется, он бывает "действующий", "умер" и "выбыл".
Вот мне нужны сведения о действующих товарисчах.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957339
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan
DarkMan
пропущено...

Вам уже 100 раз задали вопрос, кто такой -действующий ???
Если это значение поля таблицы , по которому должно быть ограничение , то его нужно взять в кавычки как string , см. сдесь :
https://www.sql.ru/faq/faq_topic.aspx?fid=157


Блин , хотел изменить , а получилось новое сообщение .
P.S Если слово действующий это значение поля таблицы , а далее см.выше. :))
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957340
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
bubucha,

Есть поле в таблице "Статус" называется, он бывает "действующий", "умер" и "выбыл".
Вот мне нужны сведения о действующих товарисчах.

Тогда зайдите в FAQ и почитайте.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957344
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK,

Код: vbnet
1.
2.
3.
4.
5.
sql = "SELECT Недееспособные.Фамилия AS Недееспособные_Фамилия,"
sql = sql & " Недееспособные.Имя AS Недееспособные_Имя,"
sql = sql & "  Недееспособные.Отчество AS Недееспособные_Отчество,"
sql = sql & "  Недееспособные.Статус FROM Недееспособные"
sql = sql & "  WHERE Недееспособные.Статус='действующий'"



Попробуйте так .

P.S. И в FAQ написано , копируете текст запроса , вставляете в конструктор запросов и смотрите что получается.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957346
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, вобще задача стоит собрать сведения из двух таблиц за определенный период, несколько столбцов объединить в один и полученную таблицу выпулить в Эксель. Вот.
Думал через запрос все это сделать, но чтото пошло не так(((
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957347
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
Ребят, вобще задача стоит собрать сведения из двух таблиц

Но в приведенном примере вроде как одна таблица и простой запрос.
P.S как сказал бы sdku выложите пример в студию.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957350
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan,
Большое спасибо, сроду бы не догадался эти ковычки воткнуть. Заработало.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957352
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan,
Нет, там две таблицы, я просто пока убрал лишнее
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957353
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
DarkMan,
Большое спасибо, сроду бы не догадался эти ковычки воткнуть. Заработало.

Не мне спасибо , Вам уже до меня намекали на это. :))
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957357
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
сроду бы не догадался эти ковычки воткнуть.

Ну это вроде святая , святых и не только для VBA .
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957365
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT Опекуны.Фамилия, Опекуны.Имя, Опекуны.Отчество, Опекуны.[Дата рождения], Опекуны.СНИЛС, Опекуны.серия, Опекуны.номер, Опекуны.[кем выдан], Опекуны.[Дата выдачи], Опекуны.ГородРег, Опекуны.[Населенный пунктРег], Опекуны.УлицаРег, Опекуны.домРег, Опекуны.корпРег, Опекуны.квРег, Опекуны.Акт_назначения, Опекуны.Дата_распоряжения, Опекуны.Дата_распоряжения, Недееспособные.Фамилия, Недееспособные.Имя, Недееспособные.Отчество, Недееспособные.[Дата рождения], Недееспособные.серия, Недееспособные.номер, Недееспособные.[кем выдан], Недееспособные.[дата выдачи], Недееспособные.СНИЛС, Опекуны.[Статус опекуна], Недееспособные.ДатаПоступления
FROM Недееспособные INNER JOIN Опекуны ON Недееспособные.Код_недееспособного = Опекуны.Код_недееспосоного
WHERE (((Опекуны.[Статус опекуна])=[Forms]![Администрирование]![ПолеСоСписком108]) AND ((Недееспособные.ДатаПоступления) Between [Forms]![Администрирование]![Поле112] And [Forms]![Администрирование]![Поле114]));



Прошу не материте сильно. Так выглядит код в SQL запросе.
Запрос сам вполне нормально формируется и выводит то, что нужно.
Проблема в том, что столбцы фамилия имя и отчество нужно объединить в один
Данные паспорта тоже в один столбец нужно, ну и адрес соответственно тоже.
Обратиться к этому запросу через Recordset не получается. Думал сформировать его через VBA и поставлять во временную таблицу.
Вот. Как на духу.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957374
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
Обратиться к этому запросу через Recordset не получается.
блин, ну FAQ же отправили! Прочитать трудно?! Будем дальше тупить?
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957376
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK,

https://www.sql.ru/faq/faq_topic.aspx?fid=410 Если все параметры являются ссылками на контролы форм (Forms![ИмяФормы]![ИмяКонтрола]), тогда самое простое (и красивое) решение:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim q As DAO.QueryDef, p As DAO.Parameter
dim rst as DAO.Recordset
  Set q = CurrentDb.QueryDefs("ИмяЗапроса") 'как обычного запроса Select,
  'так и INSERT/UPDATE; в запросах на удаление это не помогает
  For Each p In q.Parameters
    p.Value = Eval(p.Name)
  Next
  Set rst = q.OpenRecordset()'поправил под ситуацию
  q.close: Set q=Nothing
...
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957383
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
Как на духу.

не уверена , что отбор по дате сработает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
SELECT Опекуны.Фамилия,
 Опекуны.Имя,
 Опекуны.Отчество,
 Опекуны.[Дата рождения],
 Опекуны.СНИЛС,
 Опекуны.серия,
 Опекуны.номер,
 Опекуны.[кем выдан],
 Опекуны.[Дата выдачи],
 Опекуны.ГородРег,
 Опекуны.[Населенный пунктРег],
 Опекуны.УлицаРег,
 Опекуны.домРег,
 Опекуны.корпРег,
 Опекуны.квРег,
 Опекуны.Акт_назначения,
 Опекуны.Дата_распоряжения,
 Опекуны.Дата_распоряжения,
 Недееспособные.Фамилия,
 Недееспособные.Имя,
 Недееспособные.Отчество,
 Недееспособные.[Дата рождения],
 Недееспособные.серия,
 Недееспособные.номер,
 Недееспособные.[кем выдан],
 Недееспособные.[дата выдачи],
 Недееспособные.СНИЛС,
 Опекуны.[Статус опекуна],
 Недееспособные.ДатаПоступления
FROM Недееспособные
 INNER JOIN Опекуны
 ON Недееспособные.Код_недееспособного = Опекуны.Код_недееспосоного
WHERE (((Опекуны.[Статус опекуна])=[Forms]![Администрирование]![ПолеСоСписком108])
 AND ((Недееспособные.ДатаПоступления) Between [Forms]![Администрирование]![Поле112]
 And [Forms]![Администрирование]![Поле114]));
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957449
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
Set RS=CurrentDB.OpenRecordset("select * from tbl where ctl=" & полеФормы) ' если число
Set RS=CurrentDB.OpenRecordset("select * from tbl where ctl='" & полеФормы & "'") ' если текст
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957524
PavelPK, у вас два затыка: "выпулить в Эксель" и "столбцы объединить в один."
1. выпулить в Эксель
Самый простой для вас способ - экспорт сохраненного запроса командой
DoCmd.TransferSpreadsheet
Эта команда понимает ссылки на элементы форм.
Если, всё же, хотите одолеть Recordset, то пробуйте пример от Панунг.
Но он для сохраненного запроса. Если SQL выражение создается на лету, то вместо
Set q = CurrentDb.QueryDefs("ИмяЗапроса")
надо
Set q = CurrentDb.CreateQueryDef("", sql)

2. столбцы объединить в один
А в чем проблема?
Код: sql
1.
Опекуны.ГородРег & " " + Опекуны.[Населенный пунктРег] & " " &  Опекуны.УлицаРег & " д." &  Опекуны.домРег & " корп." +  Опекуны.корпРег & " кв." +  Опекуны.квРег As Опекуны_Адрес

В этом примере в одну кучу собирается адрес, причем, если поля "Населенный пунктРег", "корпРег" или "квРег" пустые, то в итоге нет лишних вставок типа " корп.", " кв.".
Но учтите, что если в результате конкатенации длина строки не должна превышать 255 символов, иначе с лишними символами начнутся чудеса.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957821
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,
Как то никогда не приходилось сохранять запросы.
Подскажите как это сделать.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957822
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,
Судя по всему из-за того что запрос не сохранен пишет "Не возможен запуск запроса на выборку"
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957829
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос на создание таблицы тоже не выполняет. Ругается на то, что в этих таблицах есть одинаковые имена.
Блин, как все сложно то.......
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957832
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
Панург,
Судя по всему из-за того что запрос не сохранен пишет "Не возможен запуск запроса на выборку"
Так сохрани.

PavelPK, ты свой вопрос сделай в QBE (графический редактор запросов), убедись что всё правильно работает. Потом пользуйся кодом.
Не понимаю, зачем тащить текст запроса в код VBA, тем более если плохо соображаешь что к чему. Да потом ещё приходится проделывать ту же самую операцию, что я указал выше, при отладке строки запроса формируемой в коде.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957834
Geizer1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PavelPK
Кривцов Анатолий,
Как то никогда не приходилось сохранять запросы.
Подскажите как это сделать.

Имели ввиду что сохранён сам запрос, как объект, а не его содержимое (не данные).
Сохранённый запрос появится там же где и таблицы и формы в левой части окна Access. У сохранённого запроса будет Имя - это и значит что он сохранённый.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957838
PavelPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, натупил я здесь.....
В общем работает код Панурга. Спасибо всем, ребята.
Дело в том что при создании запроса с самого начала, он присваивает имена таблицы с указанием собственно имени самой таблицы, а вот уже при добавлении полей в режиме конструктора в запрос, имя таблицы уже не выводит.
Тоесть с самого начала допустим имя "Недееспособные_Фамилия: Фамилия", а при добавлении в конструкторе уже пишет просто фамилия.
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957902
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPK
....а вот уже при добавлении полей в режиме конструктора в запрос, имя таблицы уже не выводит.
Тоесть с самого начала допустим имя "Недееспособные_Фамилия: Фамилия", а при добавлении в конструкторе уже пишет просто фамилия.
Не правда
...
Рейтинг: 0 / 0
Обращение к запросу через VBA
    #39957912
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конструктор "пишет" такой код:
Код: vbnet
1.
2.
SELECT контрагенты.контрагент, перечень.Контрагент
FROM контрагенты INNER JOIN перечень ON контрагенты.КодК = перечень.Контрагент;
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обращение к запросу через VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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