Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Select case... / 22 сообщений из 22, страница 1 из 1
31.03.2004, 15:16
    #32464119
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Access' 97, mdb...

Пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Select Case VarX and VarY
Case VarX = Null And VarY = Null
Prov = VarX + VarY +  1 
Case VarX = Null And VarY <> Null
Prov = VarY +  1 
Case VarX <> Null And VarY = Null
Prov = VarX +  1 
End Select


Переменные :VarX=8, VarY=Null

Так вот... Access смотрит все условия и ничего не выполняя переходит на End Case... Хотя, по логике, должнен выполнить третье выражение...

Это глюк или я ошибся в синтаксисе.
...
Рейтинг: 0 / 0
31.03.2004, 15:18
    #32464130
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Переходит на End Select.
...
Рейтинг: 0 / 0
31.03.2004, 15:23
    #32464146
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
ты в debugere набери:
?8 <> Null

и ты увидишь, что ответ будет не True, а Null
и поэтому у тебя ниодно условие не выполняется.
...
Рейтинг: 0 / 0
31.03.2004, 15:23
    #32464147
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Код: plaintext
1.
<>Null
=Null

Что это???
...
Рейтинг: 0 / 0
31.03.2004, 15:24
    #32464152
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
че это вообще за херня???
кто так селекты пишет???
...
Рейтинг: 0 / 0
31.03.2004, 15:26
    #32464158
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
в догонку (из help'a)

Null is the result of an explicit assignment of Null to a variable or any operation between expressions that contain Null
...
Рейтинг: 0 / 0
31.03.2004, 15:38
    #32464185
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
2 ЛП:

Да не ругайся ты...

Я пробовал и isnull(VarX)=False...таже самая ерунда.

авторче это вообще за херня???
кто так селекты пишет???

А как надо правильно???

Мне нужно, если VarX=8 И VarY=Null, выполняется третье выражение.
...
Рейтинг: 0 / 0
31.03.2004, 15:41
    #32464196
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Select Case True
Case isnull(VarX) And isnull(VarY)
Case isnull(VarX)
Prov = VarY + 1
Case isnull(Null)
Prov = VarX + 1
Case Else
Prov = VarX + VarY + 1
End Select
...
Рейтинг: 0 / 0
31.03.2004, 15:42
    #32464199
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Код: plaintext
1.
Мне нужно, если VarX= 8  И VarY=Null, выполняется третье выражение


у тебя в селекте в любой строчке результат равен Null

есть фунция Nz:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select Case VarX and VarY
Case NZ(VarX, 0 ) =  0  And Nz(VarY, 0 ) =  0 
Prov = VarX + VarY +  1 
Case NZ(VarX, 0 ) =  0  And Nz(VarY, 0 ) <>  0 
Prov = VarY +  1 
Case NZ(VarX, 0 ) <>  0  And Nz(VarY, 0 ) =  0 
Prov = VarX +  1 
End Select

...
Рейтинг: 0 / 0
31.03.2004, 15:43
    #32464202
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Select Case VarX and VarY
- это вообще полный абзац.
...
Рейтинг: 0 / 0
31.03.2004, 15:43
    #32464206
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Prov = VarX + VarY + 1 будет равно Null
...
Рейтинг: 0 / 0
31.03.2004, 15:45
    #32464209
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
cорри, проглючил ;)
...
Рейтинг: 0 / 0
31.03.2004, 15:47
    #32464217
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
блин
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select Case VarX and VarY
Case NZ(VarX, 0 ) =  0  And Nz(VarY, 0 ) =  0 
Prov = nz(VarX, 0 ) + nz(VarY, 0 ) +  1 
Case NZ(VarX, 0 ) =  0  And Nz(VarY, 0 ) <>  0 
Prov = nz(VarY, 0 ) +  1 
Case NZ(VarX, 0 ) <>  0  And Nz(VarY, 0 ) =  0 
Prov = nz(VarX, 0 ) +  1 
End Select

...
Рейтинг: 0 / 0
31.03.2004, 15:48
    #32464221
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
Вот и я думаю:
автор- это вообще полный абзац.

Я поэтому и спрашивал как правильно...


Мужики! Большое спасибо за науку!!!

Буду пробовать.
...
Рейтинг: 0 / 0
31.03.2004, 15:49
    #32464227
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
да и наверное выражение можно так записать, без всяких Select Case:
Код: plaintext
Prov = Nz(VarX, 0 ) + Nz(VarY, 0 ) +  1 
...
Рейтинг: 0 / 0
31.03.2004, 16:04
    #32464277
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
2 Kelme:
Да, так проще всего. Если только не стоит задача научиться пользоваться Select Case.

2 Daf:
Ты хоть понимаешь, что такое And? Даже если не знал, как работает Select Case.
...
Рейтинг: 0 / 0
31.03.2004, 16:19
    #32464314
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
авторТы хоть понимаешь, что такое And? Даже если не знал, как работает Select Case.

Понимаю...
...
Рейтинг: 0 / 0
31.03.2004, 16:20
    #32464319
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
плинн. оппять я все смешное проспал

для автора:
т.к
?Null AND 1
Null
, то
VarX and VarY даст NULL (на входе вашего селекта)
т.е. получится Select Case Null
и посмотрим, что происходит дальше в этом случае:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Function testCase()
Select Case Null
Case Null
    Debug.Print  "Null" 
Case Not Null
    Debug.Print  "Not Null" 
Case Else
    Debug.Print  "Case Else" 
End Select
End Function

'_______тестируем__________'
?testCase
Case Else

(что, собсно, ожидалось
ибо
?Null = Null
Null
(а не -1), и
?Null = Not Null
Null
...
Рейтинг: 0 / 0
31.03.2004, 16:31
    #32464358
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
T.e. в данном случае происходила операция логического И, а не выбор условия, как в запросе...
Т.е. 0*1=0, а в моем случае null.


Спасибо что объяснили! Всю жизнь живи и всю жизнь учись!
...
Рейтинг: 0 / 0
31.03.2004, 17:57
    #32464560
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
автора не выбор условия, как в запросе...
Дело не в том, что запрос или не запрос. Дело в том, что операндами операции And дожны быть значения логического типа.
...
Рейтинг: 0 / 0
31.03.2004, 18:12
    #32464600
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
авторДело не в том, что запрос или не запрос

Саныч, дело в том числе и в том. (в некотором смысле):
В отличии от селекта, WHERE (пере) вычисляется для каждой записи (т.е. с точки зрения бытовой логики - для каждого значения "переменных"), а селект, при попадании на себя, исчисляет значение выражения, и если в его теле переменные поменяют значения, перевычислять значения выражения не соберется :0).
...
Рейтинг: 0 / 0
31.03.2004, 18:13
    #32464605
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select case...
На всякий случай:

select case 2
case 1:
debug.print "one"
case 2:
debug print "two"
case 2:
debug.print "three"
case 3:
debug.print "four"
case else:
debug.print "five"
end select

вернет только two - т.е. басиковый select case отрабатывает только первый подходящий раздел.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Select case... / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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