powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Параметрический запрос
22 сообщений из 22, страница 1 из 1
Параметрический запрос
    #32546420
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте Люди!
Есть вот такая проблемка:
В условие запроса в текстовое поле надо передать четыре параметра
0
1
2
200
переменные объявляю стрингами,
функции тоже As String
в результате
1 и 2 передаются, а 0 и 200 передаются как пустое значение.
Подкинте идею, как это побороть
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546423
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Э-э

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

Код: plaintext
1.
2.
3.
SELECT Подрядчики.КодП, Месторождения.Месторождение, Договора.КодД, Договора.№дог, Договора.[№ договора], Договора.Дата, Договора.Договор, Подрядчики.[Наименование подрядчика], Sum(ReestrNach.Znach) AS [Sum-Znach], Sum(ReestrObDog.[Sum-Выполнение]) AS [Sum-Sum-Выполнение], Sum(ReestrObDog.[Sum-Сумма]) AS [Sum-Sum-Сумма], Sum(ReestrCon.Zcon) AS [Sum-Zcon], Int( 0 ) AS [Sum], " " AS №акта,  2  AS Ur
FROM Месторождения INNER JOIN (Подрядчики INNER JOIN (ReestrCon RIGHT JOIN (ReestrNach RIGHT JOIN (ReestrObDog RIGHT JOIN Договора ON ReestrObDog.КодД = Договора.КодД) ON ReestrNach.КодД = Договора.КодД) ON ReestrCon.КодД = Договора.КодД) ON Подрядчики.КодП = Договора.КодП) ON Месторождения.[Шифр месторождения] = Договора.[Шифр месторождения]
WHERE (((Месторождения.[Шифр месторождения])=mest()) AND ((ReestrCon.Zcon)> 0 . 5 )) OR (((Месторождения.[Шифр месторождения])=mest1()) AND ((ReestrCon.Zcon)> 0 . 5 )) OR (((Месторождения.[Шифр месторождения])=mest2()) AND ((ReestrCon.Zcon)> 0 . 5 )) OR (((Месторождения.[Шифр месторождения])=mest3()) AND ((ReestrCon.Zcon)> 0 . 5 ))
GROUP BY Подрядчики.КодП, Месторождения.Месторождение, Договора.КодД, Договора.№дог, Договора.[№ договора], Договора.Дата, Договора.Договор, Подрядчики.[Наименование подрядчика], Int( 0 ), " ",  2 ;
И четыре функции
Public Mestor As String
Код: plaintext
1.
2.
Function mest() As String
mest = Mestor
End Function
Переменная Mestor присивается в форме
либо одно и чисел, приведенных выше, либо пустая
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546451
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если поставить брейкпойнт на строке mest = Mestor, то что там видно? После исполнения этой строки чему равно mest и чему Mestor?
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546457
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понял зачем функция возвращает стринги, если ты числа сравниваешь :(
+
при использовании глобальных переменных, надо помнить, что они могут сбрасываться при возникновении ошибок!
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546461
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome что они могут сбрасываться

И обязатально сбросятся:)
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546467
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ обязатально сбросятся:)
Если ошибка не обработана, то да :)
т.е. - я имел ввиду конструкцию типа (On Error ...)

код
Код: plaintext
1.
2.
3.
4.
5.
Sub xxx()
On Error Resume Next
Dim a as int 
a =  0 
a =  1  / a
End Sub
не сбросит глобальные переменные :)
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546572
Galustov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем надо использовать функцию? Почему нельзя просто присвоить переменным значения и подставить при формировании запроса? Тогда сразу будет видно где ошибка.
Моё личное мнение...
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546622
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли поставить брейкпойнт на строке mest = Mestor, то что там видно? После исполнения этой строки чему равно mest и чему Mestor?
При присвоении 0
Mestor =""
mest=""
При присвоении 1
Mestor ="1"
mest="1"
При присвоении 2
Mestor ="2"
mest="2"
При присвоении 200
Mestor =""
mest=""
авторне понял зачем функция возвращает стринги, если ты числа сравниваешь
Функция возвращает стринги так как поле Шифр месторождения, на которое идет условие текстовое, не спрашивайте почему...
авторА зачем надо использовать функцию? Почему нельзя просто присвоить переменным значения и подставить при формировании запроса?
Запрос не в VBA а обычный сохраненный
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546668
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ИрчаПри присвоении 0
Mestor =""
При присвоении 200
Mestor =""
Это значит, что Mestor портится где-то раньше.
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546669
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я вообще не тем путем иду...
подсоветуйте варианты.
У меня 4 месторождения, и надо отобрать зиписи, либо по одному, либо по нескольким возможным вариантам.
Для этого 4 функции, каждая из которых может передавать параметр либо пустое значение.
Может можно по другому???
...
Рейтинг: 0 / 0
Параметрический запрос
    #32546711
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВСMestor портится где-то раньше.

на точке останова
Код: plaintext
1.
2.
Mector = Me.Ber
Me.Ber= 0 
Mector Empty
остальные переменные передаются нормально, 200 тоже пошло
возвращаеся к первому вопросу
Как объяснить переменоой что мой ноль это не пустое место а строковое значение 0.
Если я в запросе в условии вручную пишу "0" то все работает
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547513
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторКак объяснить переменоой что мой ноль это не пустое место а строковое значение 0.
Для этого надо написать его как строку:
"0"
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547523
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mestor ="2" - это НЕПРАВИЛЬНО.
Должно быть Mestor ="'2'"
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547525
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Может я вообще не тем путем иду...
подсоветуйте варианты.
У меня 4 месторождения, и надо отобрать зиписи, либо по одному, либо по нескольким возможным вариантам.
Для этого 4 функции, каждая из которых может передавать параметр либо пустое значение.
Может можно по другому???

обьясни подробно

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

это означает все месторождения 1 2 3 ?
на пальцах(примере) покажи
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547526
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть вокруг 2 должны быть одиночные кавычки.
"'2'"
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547531
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victosha, позволю себе возразить. Есть разница между:

1. "select ..." & f() & "...

и

2. "select ... f() ...

В первом случае сначала вычисляется f() и результат вставляется в селект, тогда нужны кавычки. Во втором случае f() вычисляется при выполнении селекта, и там все символы, входящие в результат, будут рассматриваться как часть стринга.
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547533
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Месторождения.[Шифр месторождения] IN {'1','2','200'}
(скобки - не помню - возможно круглые)
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547534
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
Ты прав.
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547741
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С кавычками пробовала со всеми Бесполезно
Пока подставила в запрос поля формы. Так работает, но мне такое решение не очень нравится, слишком много форм
Shuhardобьясни подробно
это означает все месторождения 1 2 3 ?
на пальцах(примере) покажи
Всего 4 месторождения
их индификиторы 0,1,2,200
варианты: либо одно из них, либо любое сочетание типа
0,2 ; 0,1,2,200; 1,2,200; ну и т.д.
индификаторы подставляются в текстовое поле
...
Рейтинг: 0 / 0
Параметрический запрос
    #32547818
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант с глобальными переменными не хорошо (ИМХО)

Я бы предложил:
1. Формировать запрос в VBA, воспользовавшись структурой IN
Код: plaintext
1.
strSQL = "... Where (Месторождения.[Шифр месторождения] IN ('0', '1', '2', '200')) " & _
"AND (ReestrCon.Zcon > 0.5) GROUP BY ..."

2. Формировать по нужным ключам, записи во временной таблице и пользовать ее в запросе
Код: plaintext
1.
2.
... Where (Месторождения.[Шифр месторождения] IN (Select [Шифр] From TMP1)) 
AND (ReestrCon.Zcon >  0 . 5 )
GROUP BY ...
...
Рейтинг: 0 / 0
Параметрический запрос
    #32548476
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за совет, я попробую
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Параметрический запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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