powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / программное выполнение запроса с параметрами
42 сообщений из 42, показаны все 2 страниц
программное выполнение запроса с параметрами
    #40004551
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Сто лет не делал запросы DAO, вот не могу запустить запрос "сводные_все" с параметрами вида
Код: sql
1.
2.
3.
INSERT INTO t1 (p1,p2,...) 
SELECT count(p1),p2,...* FROM t2 
WHERE p2 BETWEEN [minus__month] AND [date_to]



там два параметра - начальная и конечная даты.

Выскакивает ошибка на стадии запуска процедуры:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Expected: =
---------------------------
ОК   Справка   
---------------------------

И че он моргает, на что намекает, не понимаю :))

Запуск qryPar с такими параметрами:
qryPar("сводные_все","[minus_3_month]","1/1/2020",vbvartype.vbDate,"[date_to]","1/2/2020",vbvartype.vbdate)

другие строковые или числовые параметры ставил, та же фигня. Запущенный вручную запрос работает.
Если оставить один параметр - имя запроса, то тоже работает.

Где-то на форуме я видел готовые процедуры для выполнения запросов с параметрами, м.б. кто поделится?
Вот процедура запуска запроса с параметрами в DAO:

Код: vbnet
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.
Public Sub qryPar(qryName As String, ParamArray arrPar()) 'ïåðå÷èñëåíèå ïàðàìåòðîâ âèäà: "[èìÿ]","çíà÷åíèå","òèï"
Dim q As DAO.QueryDef, i As Integer

On Error GoTo err1

Set q = CurrentDb.QueryDefs(qryName)
    
For i = 0 To UBound(arrPar) Step 3 'è ò.ä. ïîêà íå ïåðåáåðåòå âñå ïàðàìåòðû
  Select Case arrPar(i + 2)
  Case vbvartype.vbString
    q.Parameters(arrPar(i)).Value = CStr(arrPar(i + 1))
  Case vbvartype.vbDate
    q.Parameters(arrPar(i)).Value = CDate(arrPar(i + 1))
  Case vbvartype.vbInteger
    q.Parameters(arrPar(i)).Value = CInt(arrPar(i + 1))
  Case vbvartype.vbBoolean
    q.Parameters(arrPar(i)).Value = CBool(arrPar(i + 1))
  Case vbvartype.vbDecimal
    q.Parameters(arrPar(i)).Value = CDec(arrPar(i + 1))
  Case vbvartype.vbDouble
    q.Parameters(arrPar(i)).Value = CDbl(arrPar(i + 1))
  Case Else
    q.Parameters(arrPar(i)).Value = Eval(arrPar(i + 1)) 'äëÿ ïàðàìåòðîâ âèäà Forms![ÈìÿÔîðìû]![ÈìÿÊîíòðîëà]
  End Select
Next i

q.Execute
q.Close

Set q = Nothing
Exit Sub

err1:
Debug.Print Err.Number & " " & Err.Description
End Sub

============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004572
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Expected: =
---------------------------
ОК   Справка   
---------------------------

это не ошибка времени исполнения, это ошибка компиляции
так что твоя процедура, возможно, не причем

Выполни в редакторе VBA Debug - Compile, и редактор покажет где эта ошибка
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004576
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

нет ошибок, пробовал уже
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004577
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbvartype - не объявлен в параметрах ф-ии qryPar
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004580
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bubucha, вот более простой вариант, запрос переделал на выборку, ошибка та же...

Код: vbnet
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.
Public Sub qryPar2(qryName As String, ParamArray arrPar()) 'перечисление параметров 
Dim q As DAO.QueryDef, p As Parameter, i As Integer

On Error GoTo err1

Set q = CurrentDb.QueryDefs(qryName)
   
For Each p In q.Parameters
  Select Case p
  Case IsDate(p)
    p.Value = CDate(arrPar(i))
  Case IsNumeric(p)
    p.Value = CInt(arrPar(i))
  Case Else
    p.Value = Eval(arrPar(i)) 'для параметров вида Forms![ИмяФормы]![ИмяКонтрола]
  End Select
Next p

q.Execute
q.Close

Set q = Nothing
Exit Sub

err1:
Debug.Print Err.Number & " " & Err.Description
End Sub


Кто развеселит меня, тому полцарства!
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004581
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
bubucha, вот более простой вариант, запрос переделал на выборку, ошибка та же...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
...
   
For Each p In q.Parameters
  Select Case p
  Case IsDate(p)
    p.Value = CDate(arrPar(i))
  Case IsNumeric(p)
    p.Value = CInt(arrPar(i))
  Case Else
    p.Value = Eval(arrPar(i)) 'для параметров вида Forms![ИмяФормы]![ИмяКонтрола]
  End Select

DEBUG.PRINT p.value 'тут все ожидаемое?

Next p
...


Кто развеселит меня, тому полцарства!
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004583
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bubucha,

Не понял вопрос. Он ни одной строки не выполняет в процедуре.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004585
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
bubucha,
Не понял вопрос. Он ни одной строки не выполняет в процедуре.

Надо убедиться, что параметры действительно передаются в массиве и передаются корректно, если debug.print ничего не кажет, то параметры не передаются и надо смотреть место инициализации массива
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004588
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bubucha,

я проце-дуру запускаю со строки окна отладки, без параметров запускается, но запрос не выполняется, естественно. С параметрами - эта ошибка прёт.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004590
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
я проце-дуру запускаю со строки окна отладки

так запускаешь ?
dab2
Запуск qryPar с такими параметрами:
qryPar("сводные_все","[minus_3_month]","1/1/2020",vbvartype.vbDate,"[date_to]","1/2/2020",vbvartype.vbdate)

скобки вокруг параметров убери
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004598
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

не помогает.

Вот что у меня подключено на всякий.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004603
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004613
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
court,

не помогает.

ты гонишь
скрин вызова процедуры из окна отладки с сообщением ошибки давай
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004619
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

Код: vbnet
1.
qryPar("сводные_все","[minus_3_month]","1/1/2020",2,"[date_to]","1/2/2020",2)



со скобками или без, ошибка одна и та же.

Я тут на ADO пробую делать, уже пошло. М.б. забьём на старьё?
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004620
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
со скобками или без, ошибка одна и та же.

сделай БЕЗ скобок, и то, что тебя попросили !
скрин вызова процедуры из окна отладки с сообщением ошибки давай
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004622
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

я тебе видео пришлю
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004623
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
court,

я тебе видео пришлю



БЕЗ скобок !

так заметно ?
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004626
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
dab2
court,

я тебе видео пришлю



БЕЗ скобок !

так заметно ?
аа, мне дошло, в каком месте ты тупишь


Ты "скобками" считаешь "квадратные скобки"
... хотя я написал "скобки вокруг параметров убери"

вот так должен выглядеть вызов из окна отладки / кода
Код: vbnet
1.
qryPar "сводные_все","[minus_3_month]","1/1/2020",2,"[date_to]","1/2/2020",2


или так
Код: vbnet
1.
call qryPar("сводные_все","[minus_3_month]","1/1/2020",2,"[date_to]","1/2/2020",2)
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004630
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

а правда туплю, во я тупой! Клинит же иногда!

Полцарства в студию!!
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004636
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
Полцарства в студию!!

таки и наливай товарищу court ;-)
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004666
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2

там два параметра - начальная и конечная даты.
А если прочесть это п.3
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004716
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004719
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
...Где-то на форуме я видел готовые процедуры для выполнения запросов с параметрами...
Может я чё не понимаю:
-в VBA синтаксис должен быть такой:
Код: vbnet
1.
".....p2 between #" & Format(Me.minus__month,"mm\/dd\/yy") & "# and #" & Format(Me.date_to,"mm\/dd\/yy") & "#"

-почему в конструкторе, в строке "условие отбора", для поля p2 не написать:
Код: vbnet
1.
between Forms!Fname!minus__month and Forms!Fname!date_to 

(вообще без VBA,ссылки ПОЛНЫЕ)
-да и применение статистической функции COUNT без группировки...
Ваше желание увидеть в одном запросе итог по одному полю и подробности по остальным,по меньшей мере противоречиво
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004798
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, спасибо за повторение п.3!

sdku
итог по одному полю и подробности по остальным
- так при использовании агрегатных функций в полях, остальные группируются, что само собой разумеется, иначе как всё это совместить в одной таблице? Здесь суммирование количества определенных номеров накладных на группы выбора по различным полям. Например (условно говоря), на определенные даты сколько накладных с разными номерами? Даты группируются, номера одинаковых накладных суммируются. И так по любым полям. Или я не понимаю ваше непонимание
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004799
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
(вообще без VBA,ссылки ПОЛНЫЕ)

там на самом деле начальная дата корректируется, а не берется из поля на прямую, так бы я и сам сделал, конечно.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004801
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ещё что! Вы мне вот чего скажите. а то м.б. я опять туплю - почему после прохождения On Error GoTo ErrorHandler
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function DoesQryExist(QueryName As String) As Boolean
Dim qdf As DAO.QueryDef

On Error GoTo ErrorHandler

DoesQryExist = False

Set qdf = CurrentDb.QueryDefs(QueryName)

DoesQryExist = True

ErrorHandler:


прога при отсутствии объекта - запроса на операторе set вместо перехода на ErrorHandler: выдаёт ошибку на месте!!!
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004805
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004808
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставить on error resume next и потом проверить номер ошибки?
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004809
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311,

всё так же, ошибка 3265.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004810
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
sdku
(вообще без VBA,ссылки ПОЛНЫЕ)
там на самом деле начальная дата корректируется, а не берется из поля на прямую, так бы я и сам сделал, конечно.
Чё-то не вкурю: дата введенная в поле корректируется и превращается в параметр запроса и какая разница с какой "полки" он берётся. Лично мне ТЗ не понятно,от слова совсем,однако
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004811
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2,

в радакторе VBA, Tools - Options - General
что у тебя в Error Trapping ?
Нужно установить на Break on Unhandled Errors
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004816
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

точно! Вторую полцарства в сту... стоп, а я с чем останусь?..
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004832
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
....так при использовании агрегатных функций в полях, остальные группируются, что само собой разумеется...
А я-то, наивный, думал что группировка определяется предложением GROUP BY в инструкции SQL,а для этого нажимается кнопочка групповых операций и в ней появляется это предложение а до нажатия кнопки этого предложения там не будет
Все Ваши "непонятки" происходят от того что Акс не может создать такой запрос\объект-в Вашей инструкции SQL GROUP BY не наблюдается
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004851
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

не переживайте, вы не наивный, я-то конструктором пользуюсь, про него и пишу.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004864
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
.... я-то конструктором пользуюсь, про него и пишу.
Вы уж определитесь конструктор или VBA и "готовые ПРОЦЕДУРЫ "???
Запрос открывается из окна БД?
Если Вы хотите этого:
dab2
...Где-то на форуме я видел готовые процедуры для выполнения запросов с параметрами...
То ответ здесь: 22207842
если чего-то другого, кратко и понятно опишите задачу\"хотелку"-лично я не понимаю чего Вы хотите.
Чтоб решить какую-либо\Вашу задачу её нужно,как минимум,уяснить
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004869
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

сейчас я делаю выполнение сохраненных запросов в конструкторе с параметрами дат в данном случае. Библиотека DAO. Это не мой проект, я поддерживаю то, что уже написано. При попытке запуска сохраненного запроса, который вручную нормально запускается, у меня ошибка:
3464 Несоответствие типов данных в выражении условия отбора.
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004876
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку:
-какие данные хранятся в таблице (исходные данные)
-что Вы хотите увидеть и где (вывести запрос на экран,отобразить какие-то итоговые\конкретные значения в полях\списке на форме-при использовании VBA совсем не обязательно создавать запрос и куда-то записывать результат инструкцией INSERT)
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004885
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-какие данные хранятся в таблице\ах (исходные данные)
-что Вы хотите увидеть и где (вывести запрос на экран,отобразить какие-то итоговые\конкретные значения в полях\списке на форме-при использовании VBA совсем не обязательно создавать запрос и куда-то записывать результат инструкцией INSERT)
dab2
... При попытке запуска сохраненного запроса, который вручную нормально запускается, у меня ошибка:
3464 Несоответствие типов данных в выражении условия отбора.
Видеть такое сообщение-это "нормально запускается". Уж не по полюСоСписком\полюПодстановки Вы что-то отбираете.
Выложили бы проблемный фрагмент-было бы намного проще Вам помочь
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004889
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004934
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

он здоровый реально, чтобы его скрином или текстом разбирать. Но суть - там два параметра типа "дата", при подстановке вручную в конструкторе, он нормально отрабатывает, программно же выдаёт эту ошибку несоответствия типа данных. Собственно, вот кусок с параметрами:
Код: sql
1.
WHERE (((LoadTime.[Дата и время загрузки на локальный сервер]) Between [minus_3_month] And [date_to]))


Здесь я его запускаю в процедуре под именем:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function qryPar(qryName As String, ParamArray arrPar()) As Long  'перечисление параметров вида: "[имя]","значение"
Dim q As DAO.QueryDef, i As Integer

On Error GoTo err1

Set q = CurrentDb.QueryDefs(qryName)

For i = 0 To UBound(arrPar()) Step 2
  If IsDate(arrPar(i + 1)) Then
    q.Parameters(arrPar(i)).Value = CDate(arrPar(i + 1))
  ElseIf IsNumeric(arrPar(i + 1)) Then
    q.Parameters(arrPar(i)).Value = CDec(arrPar(i + 1))
  Else
    q.Parameters(arrPar(i)).Value = Eval(arrPar(i + 1)) 'для параметров вида Forms![ИмяФормы]![ИмяКонтрола]
  End If
Next i

q.Execute
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004957
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2,
все-таки объясните примерно так:
в БД имеется запрос с именем ...и форма(или inputBox) для ввода параметров начальной и конечной даты. Надо создать процедуру VBA которая извлечет из таблицы записи соответственно критерию поиска,который может изменяться в зависимости от ......так-то и так-то
...
Рейтинг: 0 / 0
программное выполнение запроса с параметрами
    #40004965
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

параметры даты формируются в vba по правилам
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
d = DatePart("d", Me.dateFrom)
m = DatePart("m", Me.dateFrom)
y = DatePart("yyyy", Me.dateFrom)
date_from = m & "/" & d & "/" & y
minus_3_month = IIf(m >= 3, m - 2, Format(DatePart("m", DateAdd("m", -2, Me.dateFrom)), "00")) & "/" & 1 & "/" & IIf(m >= 3, y, Format(DatePart("yyyy", DateAdd("yyyy", -1, Me.dateFrom))))
d = DatePart("d", DateAdd("d", 1, Me.dateTo))
m = DatePart("m", DateAdd("d", 1, Me.dateTo))
y = DatePart("yyyy", DateAdd("d", 1, Me.dateTo))
date_to = m & "/" & d & "/" & y


так что здесь всё ок.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / программное выполнение запроса с параметрами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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