Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
 Аватар для Silur
1370 / 290 / 16
Регистрация: 16.01.2014
Сообщений: 922

Access 2019 и параметрические запросы

07.10.2023, 12:30. Показов 4127. Ответов 86

Студворк — интернет-сервис помощи студентам
По указанию начальства организацию переводят на Office 2019
Пару недель работали нормально. Но подошло время писать отчёты. А там у меня всё на хранимых параметрических запросах.
Для тех, кто не знает. Это такие запросы, в которые передаются параметры при вызове (запуске) запроса.
В Access 2010 всё работало нормально, а сейчас отказывается

Пример хранимого параметрического запроса
SQL
1
2
3
4
5
6
PARAMETERS [cYear] Long, [cPeriod] Long;
INSERT INTO tbl_Temp12b ( КодСубъект, НаимСубъект, КодОбл )
SELECT Тб304РеСубъект.КодСубъект, Тб304РеСубъект.НаимСубъект, Тб304РеСубъект.КодОбл
FROM Тб304РеСубъект INNER JOIN Тб321КлПериод ON Тб304РеСубъект.[Код период] = Тб321КлПериод.КодПериод
WHERE (((Тб321КлПериод.pYear)=[cYear]) AND ((Тб321КлПериод.IdCodPeriod)=[cPeriod]))
WITH OWNERACCESS OPTION;
Вызов в программе выглядит так
Visual Basic
1
2
3
                strParameters = " " & intCurYear & ", " & 16 ' " 2023, 16"
' заполнение временной таблицы tbl_Temp12b начальными данными
        CurrentProject.Connection.Execute "qry_Tab12f" & strParameters
Если запрос запускается из программы то выдаётся сообщение - смотри рисунок

Но если запрос запустить из оболочки Access дважды щелкнув по нему То запрашиваются параметры и он нормально отрабатывает.

Первый рисунок - запрос запускается кодом из программы, второй и третий - из оболочки Access.

Что делать?!
Миниатюры
Access 2019 и параметрические запросы   Access 2019 и параметрические запросы   Access 2019 и параметрические запросы  

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.10.2023, 12:30
Ответы с готовыми решениями:

Какие отзывы об Access 2019? Что лучше Access 2016 или Access 2019?
Здравствуйте! Подскажите, стоит ли использовать Access 2019 или лучше '16?

Не работают параметрические запросы
Создал БД, сделал запрос такой , но когда запускаю запрос, получаю и ничего он не спрашивает, так же не подсвечиваются подсказки вроде...

Параметрические запросы не работают
Вечер добрый. Не пойму в чем дело: параметрический запрос создан, но все запросы работают лишь раз. Даже если открываешь заново БД, то все...

86
 Аватар для alecko5
885 / 148 / 35
Регистрация: 05.08.2022
Сообщений: 681
11.10.2023, 17:59
Студворк — интернет-сервис помощи студентам
при запуске вручную запрос то отрабатывал норм.
как помог? Аксесс писал о недостаточных данных, но какие именно - непонятно. (там еще байты, integer)
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,617
11.10.2023, 18:07
Цитата Сообщение от alecko5 Посмотреть сообщение
Аксесс писал о недостаточных данных, но какие именно - непонятно
Так вот я вывел в Immediate - прочитал ... и ... полез сравнивать ...
0
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
11.10.2023, 19:34
Цитата Сообщение от andris2 Посмотреть сообщение
Создайте глобальную переменную, которой в нужном месте и в нужное время будут присваиваться различные значения.
И в стандартном модуле, как я уже писал, создайте функцию ее возвращающую. Можно в любой запрос эту функцию запихнуть.
очень так себе решение, к тому же устаревшее. С появлением коллекции TempVars можно обойтись без всяких функций, да и более универсальное решение.
Сам я никогда не использовал переменные выше уровня модуля...
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,617
11.10.2023, 19:47
Цитата Сообщение от Панург Посмотреть сообщение
С появлением коллекции TempVars ...
Да, но нужно иметь ввиду: "... feature that was added to Access 2007+"
А значит прощай конвертация приложения в формат 2003, хотя на сегодняшний день, это уже не столь актуально.
0
509 / 163 / 22
Регистрация: 04.10.2015
Сообщений: 646
11.10.2023, 19:51
Цитата Сообщение от Панург Посмотреть сообщение
С появлением коллекции TempVars
Но эта коллекция, видимо тоже занимает определенное количество памяти? Поэтому есть ли выигрыш?
Конечно с коллекциями обращаться проще - они компактнее без сомнения. Но, когда разраб начинает "изобретать" колесо,
то жалко на это смотреть. А на этом форуме чего только не "напридумывают", даже во сне не приснится
Цитата Сообщение от Панург Посмотреть сообщение
очень так себе решение, к тому же устаревшее
сойдет! Главное, не запутаться в этих переменных Зато, как говорится просто и надежно
Юзеру вообще-то фиолетово, как ты реализовал его "хотелки"
0
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
12.10.2023, 03:54
Цитата Сообщение от andris2 Посмотреть сообщение
Но эта коллекция, видимо тоже занимает определенное количество памяти? Поэтому есть ли выигрыш?
дело совсем не в памяти.
Цитата Сообщение от andris2 Посмотреть сообщение
Но, когда разраб начинает "изобретать" колесо,
то жалко на это смотреть.
вот и я говорю про это - функции, глобальные переменные...
0
509 / 163 / 22
Регистрация: 04.10.2015
Сообщений: 646
12.10.2023, 05:39
Цитата Сообщение от Панург Посмотреть сообщение
вот и я говорю про это - функции, глобальные переменные.
Согласен с вами, но при одном условии: если ты изначально пишешь на АКСе новых версий.
Но у меня не тот случай, разработку веду на MSA2003 и этой возможности лишен. К сожалению
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
12.10.2023, 06:55
Цитата Сообщение от Silur Посмотреть сообщение
Дело не во мне, а в клиентах. У каждого клиента своя организация, своя политика свои требования. У кого 2010, У кого 2013, у кого 2016, у кого 2019. Есть и 2021. У кого Офис х32, у кого - х64.
В таком случае о каком 2019-м может идти речь? Ставьте 2003-й х86 и вперёд (х32 нет в природе).

Добавлено через 4 минуты
Цитата Сообщение от Панург Посмотреть сообщение
Сам я никогда не использовал переменные выше уровня модуля...
Например я хочу использовать во всех модулях строковую переменную для sql запроса, типа
Visual Basic
1
Dim StrSql as string
Мне её объявление по вашей методе в каждый модуль пихать?
0
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
12.10.2023, 07:22
Цитата Сообщение от alvk Посмотреть сообщение
Мне её объявление по вашей методе в каждый модуль пихать?
да делай что хочешь, мне до лампочки... но я так не делаю, мне не лень объявить, чем потом ловить непонятные ошибки когда выполнится не тот запрос (например). Видимость переменных - не больше чем это требуется в данной ситуации.

Добавлено через 3 минуты
я такую переменную не то что в каждом модуле объявлю, но даже в каждой функции по потребности. Есть такое понятие - "чёрный ящик", и я не хочу помнить где у функции чего торчит
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,617
12.10.2023, 09:39
Silur, немного "допилил" на "утреннюю" голову.
Теперь первый тест принимает имя запроса как аргумент, а не инструкцию SQL.
Вложения
Тип файла: zip TestADO_v02.zip (34.9 Кб, 11 просмотров)
1
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
12.10.2023, 10:35
Eugene-LS, ExecuteParametersOnly...
Смешались в кучу кони, люди... ©
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,617
12.10.2023, 10:38
Цитата Сообщение от Панург Посмотреть сообщение
Смешались в кучу кони, люди...
Спасибо большое!
Так действительно лучше.
0
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
12.10.2023, 10:41
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Так действительно лучше.
а зачем мешать в одной функции разные библиотеки?
ну хотя бы вызывать из первой вторую...

Добавлено через 1 минуту
или перевести уж на DAO всё
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,617
12.10.2023, 10:52
Цитата Сообщение от Панург Посмотреть сообщение
а зачем мешать в одной функции разные библиотеки?
Спасибо большое!
Какие библиотеки? - Я в этом ничего не понимаю.
Да там используется уже ADOX (вроде), но это не я писал а автор примера.
0
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
12.10.2023, 11:00
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Какие библиотеки?
не стоит дурака включать, это даже не смешно...
Visual Basic
1
sSQL = CurrentDb.QueryDefs(SavedQueryName).SQL
с каких пор это стало?
Цитата Сообщение от Eugene-LS Посмотреть сообщение
ADOX
Добавлено через 55 секунд
я хотя этим давно не занимаюсь, но основные библиотеки помню
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,617
12.10.2023, 11:04
Цитата Сообщение от Панург Посмотреть сообщение
не стоит дурака включать
Почему?

Добавлено через 59 секунд
Цитата Сообщение от Панург Посмотреть сообщение
но основные библиотеки помню
Это здоровско!
0
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
12.10.2023, 11:18
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Почему?
а по делу что-нибудь будет?
0
Эксперт MS Access
 Аватар для Eugene-LS
13262 / 5940 / 1528
Регистрация: 05.10.2016
Сообщений: 16,617
12.10.2023, 12:08
Цитата Сообщение от Панург Посмотреть сообщение
а по делу что-нибудь будет?
По какому делу?

ADOX.Catalog открыть - и .CommandText запроса выщемлять?
Это уж вы сами ... - пожалуйста.

И ещё раз спасибо за критику, хотя я в этом и ничего не понимаю.
А вдоль дороги мертвые с косами стоят, и тишина-а-а ...

Visual Basic
1
2
3
4
5
6
7
8
Private Function GetCommandText(SavedQueryName As String) As String
'Возвращает тело указанного в аргументе запроса на изменение (не выборки)
Dim objCatalog As Object ' ADOX.Catalog на позднем связывании
    Set objCatalog = CreateObject("ADOX.Catalog")
    objCatalog.ActiveConnection = getConn
    GetCommandText = objCatalog.Procedures(SavedQueryName).Command.CommandText
    Set objCatalog = Nothing
End Function
1
 Аватар для Silur
1370 / 290 / 16
Регистрация: 16.01.2014
Сообщений: 922
12.10.2023, 13:21  [ТС]
Спасибо. Проблема решена. Дело оказалось в несовпадении размеров символьного поля источника и приёмника. У источника 255, а у приемника 112. Сбивало то, что в ручном режиме из оболочки Access запрос выполнялся. И то, что программно, если вызов переделать под DAO он тоже выполнялся. Скорее всего ADO более строг, чем DAO. Да и сообщение об ошибке не отражало проблему.

Ещё раз спасибо за помощь
1
 Аватар для alecko5
885 / 148 / 35
Регистрация: 05.08.2022
Сообщений: 681
12.10.2023, 13:28
Что же, браво, Eugene-LS, и спасибо Silur, за интересное решение (не использовал параметрические запросы, предпочитаю динамические-как минимум место не занимают на панели), но иногда, когда запрос тяжелый, думаю буду сохранять их - акс хоть и не показывает, но таки строит план запросов, значит запрос может быть исполнятся будет быстрее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2023, 13:28

Как запускать из PHP кода параметрические запросы Access...
Как запускать из PHP кода параметрические запросы Access?... Или это невозможно...

Параметрические запросы
Здравствуйте! Задание такое : Клиент вводит запрос , в котором указывает требуемый ему пункт назначения и интервал возможного времени...

Параметрические запросы в TADODataSet
Доброе время суток. Пару-тройку лет назад, когда я плотно занимался Interbase и обращался к нему с помощью компонент прямого доступа,...

Как в Access объединить запросы в один или вывести эти запросы в одном отчете и рассчитать по ним коэффициент?
Добрый день! Помогите разобраться. Есть у меня 5 запросов access, которые через долгие манипуляции все же вывели мне суммы, которые...

Проблема с отчетом MS Access 2019
Задача по базе печать договоров, в отчет скопировал 2 листа из вордового договора- больше не лезет (там 4 листа). Как мне сделать отчет...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru