powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / программное выполнение запроса с параметрами
25 сообщений из 42, страница 1 из 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
25 сообщений из 42, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / программное выполнение запроса с параметрами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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