Может кому окажется полезным.
После долгих мучений и созданием тестового примера получилось следующее.
В тестовом примере тоже фильтр не работал. Выражение для фильтра скопировал из скрипта созданного в dbForge Studio.
В этой же строке подставил свои переменные и о чудо, фильтр заработал. Чем объяснить не могу. До этого фильтр набирал просто в sourse. И еще может быть полезным KREATOR. Фильтр тоже определяется в методе Init. Но на этом же окне вводятся переменные для фильтра. После ввода переменных снова формирую строку для фильтра, {PROP:SQLFilter} = 'строка' , и ThisWindow.Reset(1). Browse обновляется согласно новым значениям переменных.
PROP:SQLFilter
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: PROP:SQLFilter
Фильтр определяется в методе ApplyFilter. Свой фильтр надо задавать после Parent Call. Если нужно обновить Browse вручную, то как-то так:
ThisWindow.Reset обновляет всё на окне. Это может быть не нужно, а, во-вторых, долго.
Код: Выделить всё
BRW1.ApplyFilter()
BRW1.ResetQueue(Reset:Queue)
We are hard at work… for you. 

Re: PROP:SQLFilter
... И когда мне надоело очередной раз считать апострофы, для своих низменных потребностей написал функцию DateInRange, специально для формирования фильтра по дате
Правда, под Мелкософтовский сервер, под Мускул надо адаптировать. Наверное...
Тогда Brw....{Prop:SQLFilter} = ... ' And ' & DateInRange('opl:dat', Loc:dateFrom, Loc:DateTo)
Код: Выделить всё
DateInRange PROCEDURE (String FieldName,Long DateFrom=0, Long DateTo=0) ! Declare Procedure
CODE
If DateFrom=0 And DateTo=0
Return(' 1=1 ')
Elsif DateFrom>0 And DateTo=0
Return(' (' & FieldName & '>=''' & Format(DateFrom,@d12) & ''') ')
Elsif DateFrom=0 And DateTo>0
Return(' (' & FieldName & '<<=''' & Format(DateTo,@d12) & ''') ')
Else
Return(' (' & FieldName & ' Between ''' & Format(DateFrom,@d12) & ''' AND ''' & Format(DateTo,@d12) & ''') ' )
End
Тогда Brw....{Prop:SQLFilter} = ... ' And ' & DateInRange('opl:dat', Loc:dateFrom, Loc:DateTo)
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Re: PROP:SQLFilter
я всегда использую формат @d10-, как канонический для любого odbc
С уважением, ДП
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: PROP:SQLFilter
У меня в FireBird'е d12 не прокатило, прокатывает с любыми разделителями. Кажись, Oracle всеяден.
We are hard at work… for you. 

Re: PROP:SQLFilter
У меня @d10- работает на результатах запроса, но не работает в тексте самих запросов. @d12 работает в MS SQL в тексте запросов 100%, @d5 и @d10- зависят от локализации и ненадёжны. Но речь была не об этом, а о том, как слегка сэкономить силы и мозги...