Параметрический запрос

Ирча
Дата: 03.06.2004 12:51:57
Здравствуйте Люди!
Есть вот такая проблемка:
В условие запроса в текстовое поле надо передать четыре параметра
0
1
2
200
переменные объявляю стрингами,
функции тоже As String
в результате
1 и 2 передаются, а 0 и 200 передаются как пустое значение.
Подкинте идею, как это побороть
paparome
Дата: 03.06.2004 12:52:49
Э-э

А запрос где?
И кусок кода, где он вызывается?
Ирча
Дата: 03.06.2004 12:59:21
Запрос вот

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
Function mest() As String
mest = Mestor
End Function
Переменная Mestor присивается в форме
либо одно и чисел, приведенных выше, либо пустая
Владимир Саныч
Дата: 03.06.2004 13:03:17
Если поставить брейкпойнт на строке mest = Mestor, то что там видно? После исполнения этой строки чему равно mest и чему Mestor?
paparome
Дата: 03.06.2004 13:06:31
не понял зачем функция возвращает стринги, если ты числа сравниваешь :(
+
при использовании глобальных переменных, надо помнить, что они могут сбрасываться при возникновении ошибок!
Hummer
Дата: 03.06.2004 13:08:01
paparome
что они могут сбрасываться


И обязатально сбросятся:)
paparome
Дата: 03.06.2004 13:11:41
автор
И обязатально сбросятся:)

Если ошибка не обработана, то да :)
т.е. - я имел ввиду конструкцию типа (On Error ...)

код
Sub xxx()
On Error Resume Next
Dim a as int 
a = 0
a = 1 / a
End Sub
не сбросит глобальные переменные :)
Galustov
Дата: 03.06.2004 13:53:42
А зачем надо использовать функцию? Почему нельзя просто присвоить переменным значения и подставить при формировании запроса? Тогда сразу будет видно где ошибка.
Моё личное мнение...
Ирча
Дата: 03.06.2004 14:07:23
автор
Если поставить брейкпойнт на строке mest = Mestor, то что там видно? После исполнения этой строки чему равно mest и чему Mestor?

При присвоении 0
Mestor =""
mest=""
При присвоении 1
Mestor ="1"
mest="1"
При присвоении 2
Mestor ="2"
mest="2"
При присвоении 200
Mestor =""
mest=""
автор
не понял зачем функция возвращает стринги, если ты числа сравниваешь

Функция возвращает стринги так как поле Шифр месторождения, на которое идет условие текстовое, не спрашивайте почему...
автор
А зачем надо использовать функцию? Почему нельзя просто присвоить переменным значения и подставить при формировании запроса?

Запрос не в VBA а обычный сохраненный
Владимир Саныч
Дата: 03.06.2004 14:21:05
Ирча
При присвоении 0
Mestor =""
При присвоении 200
Mestor =""

Это значит, что Mestor портится где-то раньше.