PROP:SQLFilter

Clarion, Clarion 7

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

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

PROP:SQLFilter

Сообщение artgkx »

С6.3.9059
Программка работала на .TPS и вроде все было нормально.Потребовалось работать в многопользовательском режиме.
Решил перевести на MYSQL. Столкнулся с проблемой фильтра на SQL.
BRW1::View:Browse{PROP:SQLFilter} = 'opl.dat >= ''2011-03-01'' AND opl.dat <= ''2011-03-31''' работает.
А вот BRW1::View:Browse{PROP:SQLFilter} = '''opl.dat => '&loc:dn&' AND opl.dat <= '&loc:dk&'''' не работает, в Browse ничего не выводится. loc:dn и loc:dk сформированные строки ''2011-03-01'' и ''2011-03-31''. При просмотре по stop() показывается строка 'opl.dat >= ''2011-03-01'' AND opl.dat <= ''2011-03-31''' . При других комбинациях с кавычками ругается на неправильный синтаксис. Прошу помощи как правильно ввести выражение фильтра на сервере.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: PROP:SQLFilter

Сообщение Admin »

Что то мне говорит что строка должна выглядеть так

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

BRW1::View:Browse{PROP:SQLFilter} = 'opl.dat => '''&loc:dn&''' AND opl.dat <= '''&loc:dk&''''
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 4981
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Re: PROP:SQLFilter

Сообщение kreator »

А что, в синтаксисе MySQL дата в двойных кавычках? В FireBird'е с одинарными, поэтому синтаксис Admin'а сработает при условии, что loc:dn - строка без кавычек вообще.
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: PROP:SQLFilter

Сообщение Admin »

Если в двойных то должны выглядеть как

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

BRW1::View:Browse{PROP:SQLFilter} = 'opl.dat => "'&loc:dn&'" AND opl.dat <= "'&loc:dk&'"'
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 4981
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Re: PROP:SQLFilter

Сообщение kreator »

Да loc:dn и loc:dk уже с двойными кавычками, изначально так созданы. Вот я и спрашиваю - а нужны ли эти кавычки вообще? Может здесь ошибка?
We are hard at work… for you. :)
artgkx
Бывалый
Сообщения: 58
Зарегистрирован: 25 Декабрь 2010, 12:23

Re: PROP:SQLFilter

Сообщение artgkx »

Да в том-то все и дело, что выражение BRW1::View:Browse{PROP:SQLFilter} = 'opl.dat >= ''2011-03-01'' AND opl.dat <= ''2011-03-31''' -работает, т.е. даты ввел в текст вручную, все выражение поместил в embed , компилируется, запускается и в программе все правильно фильтруется. Но надо ведь чтобы в процессе просмотра данных можно было менять условия фильтра, а вот тут-то и засада. На .TPS работает прекрасно, но это фильтрация на клиенте. А хочется чтобы фильтрация была на сервере. По докум. дата должна быть в двойных кавычках, и это работает если набрал руками. А вот как подставить переменную в строку фильтра, неужели никто не использовал эту возможность? На самом деле это должно быть удобно-фильтрация на сервере.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Re: PROP:SQLFilter

Сообщение Дед Пахом »

artgkx писал(а):А вот BRW1::View:Browse{PROP:SQLFilter} = '''opl.dat => '&loc:dn&' AND opl.dat <= '&loc:dk&'''' не работает
Вот тут фигня написана: зачем перед opl.dat и после loc:dk лишние апострофы? Надо

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

'opl.dat => '&loc:dn&' AND opl.dat <= '&loc:dk
С уважением, ДП
artgkx
Бывалый
Сообщения: 58
Зарегистрирован: 25 Декабрь 2010, 12:23

Re: PROP:SQLFilter

Сообщение artgkx »

Тогда сервер ругается на синтаксис.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Re: PROP:SQLFilter

Сообщение Дед Пахом »

artgkx писал(а):Тогда сервер ругается на синтаксис.
Ну значит хрень в локальных переменных записана. Надо что-то типа этого:

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

loc:dn = '2013-01-01'
loc:dk = '2014-01-01'

  'opl.dat => '''& CLIP(loc:dn) &''' AND opl.dat <= '''& CLIP(loc:dk) &''''
С уважением, ДП
BOB
Ветеран
Сообщения: 336
Зарегистрирован: 17 Июль 2005, 5:43

Re: PROP:SQLFilter

Сообщение BOB »

Для mssql это так
'opl.dat =>' &''''& CLIP(loc:dn) &''''&' AND opl.dat <=' &''''& CLIP(loc:dk) &''''
если loc:dn это date то так
'opl.dat =>' &''''& format(loc:dn,@d12)&''''......
artgkx
Бывалый
Сообщения: 58
Зарегистрирован: 25 Декабрь 2010, 12:23

Re: PROP:SQLFilter

Сообщение artgkx »

Уважаемые гуру. Это разные формы написания одной и той-же строки. В результате получается
'opl.dat >= ''2011-03-01'' AND opl.dat <= ''2011-03-31''' . Вроде бы все правильно. Но сервер ругается на синтаксис.
По доке "Note that the SQL Accelerator incorporates the PROP:SQLFilter expression into the WHERE clause of a generated SELECT statement." Но если я набрал эту-же строку вручную - сервер не ругается на синтаксис и фильтрует правильно.
В чем дело непонятно.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Re: PROP:SQLFilter

Сообщение Дед Пахом »

Это не разные формы, это разные строки. У тебя выходит SELECT * FROM opt WHERE 'opt.dat >= "2013-01-01"'.
С уважением, ДП
artgkx
Бывалый
Сообщения: 58
Зарегистрирован: 25 Декабрь 2010, 12:23

Re: PROP:SQLFilter

Сообщение artgkx »

В том то вся и засада, если подставить в PROP:SQLFilter просто строку 'opl.dat >= ''2011-03-01'' AND opl.dat <= ''2011-03-31''' , фильтр работает, а если строку сформированную, которую могу просмотреть и она выглядит точно также - облом.
На самом деле в фильтре больше переменных, так вот как только убираешь переменные Date преобразованные в строку, фильтр работает. Не судите строго - учусь. На .TPS вроде немного получается, на SQL попробовал - облом.
kreator
✯ Ветеран ✯
Сообщения: 4981
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Re: PROP:SQLFilter

Сообщение kreator »

Спор ни о чём. Ставь stop(File{prop:SQL}) и смотри, какой запрос посылается серверу.
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: PROP:SQLFilter

Сообщение Admin »

kreator писал(а):Спор ни о чём. Ставь stop(File{prop:SQL}) и смотри, какой запрос посылается серверу.
Первый дельный совет! :D
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить