PROP:SQLFilter

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
artgkx
Бывалый
Сообщения: 58
Зарегистрирован: 25 Декабрь 2010, 12:23

Re: PROP:SQLFilter

Сообщение artgkx »

Может кому окажется полезным.
После долгих мучений и созданием тестового примера получилось следующее.
В тестовом примере тоже фильтр не работал. Выражение для фильтра скопировал из скрипта созданного в dbForge Studio.
В этой же строке подставил свои переменные и о чудо, фильтр заработал. Чем объяснить не могу. До этого фильтр набирал просто в sourse. И еще может быть полезным KREATOR. Фильтр тоже определяется в методе Init. Но на этом же окне вводятся переменные для фильтра. После ввода переменных снова формирую строку для фильтра, {PROP:SQLFilter} = 'строка' , и ThisWindow.Reset(1). Browse обновляется согласно новым значениям переменных.
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: PROP:SQLFilter

Сообщение kreator »

Фильтр определяется в методе ApplyFilter. Свой фильтр надо задавать после Parent Call. Если нужно обновить Browse вручную, то как-то так:

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

BRW1.ApplyFilter()
BRW1.ResetQueue(Reset:Queue)
ThisWindow.Reset обновляет всё на окне. Это может быть не нужно, а, во-вторых, долго.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: PROP:SQLFilter

Сообщение Yufil »

... И когда мне надоело очередной раз считать апострофы, для своих низменных потребностей написал функцию DateInRange, специально для формирования фильтра по дате

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

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
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: PROP:SQLFilter

Сообщение kreator »

У меня в FireBird'е d12 не прокатило, прокатывает с любыми разделителями. Кажись, Oracle всеяден.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: PROP:SQLFilter

Сообщение Yufil »

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