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

А запрос где?
И кусок кода, где он вызывается?
...
Рейтинг: 0 / 0
03.06.2004, 12:59
    #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
03.06.2004, 13:03
    #32546451
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
Если поставить брейкпойнт на строке mest = Mestor, то что там видно? После исполнения этой строки чему равно mest и чему Mestor?
...
Рейтинг: 0 / 0
03.06.2004, 13:06
    #32546457
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
не понял зачем функция возвращает стринги, если ты числа сравниваешь :(
+
при использовании глобальных переменных, надо помнить, что они могут сбрасываться при возникновении ошибок!
...
Рейтинг: 0 / 0
03.06.2004, 13:08
    #32546461
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
paparome что они могут сбрасываться

И обязатально сбросятся:)
...
Рейтинг: 0 / 0
03.06.2004, 13:11
    #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
03.06.2004, 13:53
    #32546572
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
А зачем надо использовать функцию? Почему нельзя просто присвоить переменным значения и подставить при формировании запроса? Тогда сразу будет видно где ошибка.
Моё личное мнение...
...
Рейтинг: 0 / 0
03.06.2004, 14:07
    #32546622
Ирча
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
авторЕсли поставить брейкпойнт на строке mest = Mestor, то что там видно? После исполнения этой строки чему равно mest и чему Mestor?
При присвоении 0
Mestor =""
mest=""
При присвоении 1
Mestor ="1"
mest="1"
При присвоении 2
Mestor ="2"
mest="2"
При присвоении 200
Mestor =""
mest=""
авторне понял зачем функция возвращает стринги, если ты числа сравниваешь
Функция возвращает стринги так как поле Шифр месторождения, на которое идет условие текстовое, не спрашивайте почему...
авторА зачем надо использовать функцию? Почему нельзя просто присвоить переменным значения и подставить при формировании запроса?
Запрос не в VBA а обычный сохраненный
...
Рейтинг: 0 / 0
03.06.2004, 14:21
    #32546668
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
ИрчаПри присвоении 0
Mestor =""
При присвоении 200
Mestor =""
Это значит, что Mestor портится где-то раньше.
...
Рейтинг: 0 / 0
03.06.2004, 14:21
    #32546669
Ирча
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
Может я вообще не тем путем иду...
подсоветуйте варианты.
У меня 4 месторождения, и надо отобрать зиписи, либо по одному, либо по нескольким возможным вариантам.
Для этого 4 функции, каждая из которых может передавать параметр либо пустое значение.
Может можно по другому???
...
Рейтинг: 0 / 0
03.06.2004, 14:33
    #32546711
Ирча
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
ВСMestor портится где-то раньше.

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

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

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

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

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

и

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

В первом случае сначала вычисляется f() и результат вставляется в селект, тогда нужны кавычки. Во втором случае f() вычисляется при выполнении селекта, и там все символы, входящие в результат, будут рассматриваться как часть стринга.
...
Рейтинг: 0 / 0
03.06.2004, 19:48
    #32547533
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
Месторождения.[Шифр месторождения] IN {'1','2','200'}
(скобки - не помню - возможно круглые)
...
Рейтинг: 0 / 0
03.06.2004, 19:49
    #32547534
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
2 Саныч
Ты прав.
...
Рейтинг: 0 / 0
04.06.2004, 07:16
    #32547741
Ирча
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
С кавычками пробовала со всеми Бесполезно
Пока подставила в запрос поля формы. Так работает, но мне такое решение не очень нравится, слишком много форм
Shuhardобьясни подробно
это означает все месторождения 1 2 3 ?
на пальцах(примере) покажи
Всего 4 месторождения
их индификиторы 0,1,2,200
варианты: либо одно из них, либо любое сочетание типа
0,2 ; 0,1,2,200; 1,2,200; ну и т.д.
индификаторы подставляются в текстовое поле
...
Рейтинг: 0 / 0
04.06.2004, 09:21
    #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
04.06.2004, 13:15
    #32548476
Ирча
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметрический запрос
Спасибо за совет, я попробую
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Параметрический запрос / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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