Конструктор Where: OR и AND

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Конструктор Where: OR и AND

Сообщение StillZero »

В конструкторе WHERE две строки:
1. SELF.Select.Where(RV:RestTypeID,GLO:InventarRestID,'=','AND')
2. SELF.Select.Where(RV:RestTypeID,'','is null','OR')
т.е. по итогу должен получиться запрос вида
WHERE RestTypeID = число OR RestTypeID IS NULL

по логу формируется не OR, а AND, т.е.
WHERE RestTypeID = число AND RestTypeID IS NULL

если вторую строку заменить на строку такого же типа как и первая, то запрос формируется правильно через OR, т.е.
1. SELF.Select.Where(RV:RestTypeID,GLO:InventarRestID,'=','AND')
2. SELF.Select.Where(RV:RestTypeID,GLO:InventarRestID2,'=','OR')
получаем
WHERE RestTypeID = число OR RestTypeID = число
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Конструктор Where: OR и AND

Сообщение Andrew™ »

StillZero писал(а):В конструкторе WHERE две строки:
1. SELF.Select.Where(RV:RestTypeID,GLO:InventarRestID,'=','AND')
2. SELF.Select.Where(RV:RestTypeID,'','is null','OR')
т.е. по итогу должен получиться запрос вида
WHERE RestTypeID = число OR RestTypeID IS NULL

по логу формируется не OR, а AND, т.е.
WHERE RestTypeID = число AND RestTypeID IS NULL
взял пример ABCMAVT, там есть SQLBrowseAccounts, в ней есть дочерняя Browse по позициям, выставил следующий фильтр:

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

 SELF.Select.Where(SQLAccPos:AccRef,SQLAccounts:AccRef,'=','AND')
 SELF.Select.Where(SQLAccounts:TstDate,'','is null','OR')
в логе вижу:

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

WHERE A."AccRef"=? OR C."TstDate" is null
готовь пример на базе ABCMAVT.APP

и вообще ты меня обманываешь ;)

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

1. SELF.Select.Where(RV:RestTypeID,GLO:InventarRestID,'=','AND')
2. SELF.Select.Where(RV:RestTypeID,'','is null','OR')
должно быть не

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

WHERE RestTypeID = число OR RestTypeID IS NULL
а

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

WHERE RestTypeID = ? OR RestTypeID IS NULL
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

и вообще ты меня обманываешь
:) чутка тока, чебы понятней было

вообщем обновились мы сегодня наконец таки, проблема ушла сама собой
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

...теперь другой косяк-багофича...теперь, правда, думаю, что понимаю почему :)
в конструкторе WHERE создаю две строки:
SELF.Select.Where(RV:RestTypeID,GLO:InventarRestID,'=','(AND')
SELF.Select.Where(RV:RestTypeID,'','is null','OR)')
запрос формируется без последней скобки, т.е.

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

 WHERE (RestTypeID = число OR RestTypeID IS NULL
и соответственно ругается на синтаксис

если, опять таки, вместо второй строки повторить аналог первой строки, типо
SELF.Select.Where(RV:RestTypeID,GLO:InventarRestID2,'=','OR)')
то запрос формируется правильно
Ответить