Странное выполнение логического условия

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rom
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 30.09.2004 (Чт) 18:50

Странное выполнение логического условия

Сообщение Rom » 07.05.2005 (Сб) 12:16

Заранее прошу прощения за глупый вопрос, но я никак не могу разобраться. Street, house, flat – имена TextBox-ов. Код такой (VBA):

Код: Выделить всё

Set rec = db.OpenRecordset("главный_кс", dbOpenDynaset)


If (street.Value <> rec.Fields("Улица").Value) Or (house.Value <> rec.Fields("Дом")) Or (flat.Value <> rec.Fields("Квартира")) Then

While rec.EOF <> True
If (street.Value = rec.Fields("Улица").Value) Or (house.Value = rec.Fields("Дом")) Or   (flat.Value = rec.Fields("Квартира")) Then

po1.Cells(9, 1) = rec.Fields("Код_кс").Value



End If
rec.MoveNext
Wend


Насколько я понимаю при проверки условия с оператором OR
Код: Выделить всё
If (street.Value = rec.Fields("Улица").Value) Or (house.Value = rec.Fields("Дом")) Or   (flat.Value = rec.Fields("Квартира")) Then

если, например house.Value равно значению в rec.Fields("Дом") то должно произойти вхождение в цикл. Но вхождения в цикл почему-то условию не происходит.
Вхождение выполняется только если street.Value = rec.Fields("Улица").Value

1. Почему так происходит? (я где-то ошибся?)
2. Как сделать, чтобы вхождение в цикл происходило при выполнении одного из условий?

Ещё раз пардон за, наверное, глупый вопрос. :oops:. Заранее спасибо

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.05.2005 (Сб) 13:01

".Value" допиши всюду, где нехватает.
Изображение

Rom
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 30.09.2004 (Чт) 18:50

Сообщение Rom » 07.05.2005 (Сб) 13:50

.Value дописал, но проблема осталась. Всё равно нет вхождения в цикл. Что же делать :?:

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 07.05.2005 (Сб) 15:18

Не понял. С каких это пор дефолтное свойство текстбокса называется .Value? Вроде всю жизнь .Text было...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.05.2005 (Сб) 16:55

В VBA настоящим значением текстбокса является Value.
Lasciate ogni speranza, voi ch'entrate.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 07.05.2005 (Сб) 18:32

Rom

попробуй разграничить OR'ы скобками. Т.е. так:

Код: Выделить всё
If ((street.Value = rec.Fields("Улица").Value) Or (house.Value = rec.Fields("Дом"))) Or   (flat.Value = rec.Fields("Квартира")) Then


Мне кажется, компилятор как то хитро выполняет 3 ИЛИ сразу. Проверь дебагером что он там мутит.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Rom
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 30.09.2004 (Чт) 18:50

Сообщение Rom » 07.05.2005 (Сб) 21:04

Спасибо FAKK2 проблема решена :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.05.2005 (Сб) 23:42

FAKK2 писал(а):Rom

попробуй разграничить OR'ы скобками. Т.е. так:

Код: Выделить всё
If ((street.Value = rec.Fields("Улица").Value) Or (house.Value = rec.Fields("Дом"))) Or   (flat.Value = rec.Fields("Квартира")) Then


Пытался найти хоть одно отличие с оригинальным кодом Rom, но не смог :roll:
Ткните меня пальцем?
Изображение

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 08.05.2005 (Вс) 0:39

tyomitch
If ((street.Value = rec.Fields("Улица").Value) Or (house.Value = rec.Fields("Дом"))) Or (flat.Value = rec.Fields("Квартира")) Then
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 08.05.2005 (Вс) 0:40

Rom

Пожалуйста. Я подозревал, что нужно расставить приоритеты. :)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Rom
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 30.09.2004 (Чт) 18:50

Сообщение Rom » 08.05.2005 (Вс) 11:58

С двумя условиями всё пошло. После этого проверял трете условие. На этом и остановился.
Ещё раз всем спасибо. :)

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 11.05.2005 (Ср) 12:36

:shock: :shock: :shock:

Как это? Какие приоритеты? Операция OR инвариантна к расстановке скобок!

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 11.05.2005 (Ср) 17:35

uhm

Ну раз, ты такой умный, обьясни феномен :)
Возможно я очень глуп.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 11.05.2005 (Ср) 18:07

ХЗ, но дело не должно быть в этом, поскольку иначе это какой-то страшный баг. Непонятно еще, что заработало у автора, поскольку получившийся код мы не видим, а в вопросе какая-то путаница: в одном месте условия "не равно", в другом "равно", и в вопросе про вхождение в цикл стоит не то же самое, что в коде.

Возможно я очень глуп.


Я разве что-то про это говорил? Не хотел никого обидеть, просто очень удивился, что якобы сработал совет, который, с моей точки зрения, не может быть правильным.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 11.05.2005 (Ср) 18:31

uhm

Сработал код который я ему дал.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 11.05.2005 (Ср) 19:33

Ну, в топике этого прямым текстом не написано, более того,
С двумя условиями всё пошло. После этого проверял трете условие. На этом и остановился.

По-моему, чел сделал как-то еще более извращенно.

В любом случае, ты же не будешь спорить, что в теории должно быть абсолютно параллельно, как скобки расставлять?

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 11.05.2005 (Ср) 19:53

uhm
Теория, не практика :)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 11.05.2005 (Ср) 23:07

Теоретически, не должно быть разницы между теорией и практикой. На практике разница есть.

Если это действительно так (а лично я реально сомневаюсь), то да - это баг. И скорее всего он уже давно поправлен - ну признайтесь, кто из нас постоянно следит за обновлениями, выкладываемыми на Office Update?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 164

    TopList