PROP:SQLFilter
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
PROP:SQLFilter
С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''' . При других комбинациях с кавычками ругается на неправильный синтаксис. Прошу помощи как правильно ввести выражение фильтра на сервере.
Программка работала на .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
Что то мне говорит что строка должна выглядеть так
Код: Выделить всё
BRW1::View:Browse{PROP:SQLFilter} = 'opl.dat => '''&loc:dn&''' AND opl.dat <= '''&loc:dk&''''
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Re: PROP:SQLFilter
А что, в синтаксисе MySQL дата в двойных кавычках? В FireBird'е с одинарными, поэтому синтаксис Admin'а сработает при условии, что loc:dn - строка без кавычек вообще.
We are hard at work… for you.
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: PROP:SQLFilter
Если в двойных то должны выглядеть как
Код: Выделить всё
BRW1::View:Browse{PROP:SQLFilter} = 'opl.dat => "'&loc:dn&'" AND opl.dat <= "'&loc:dk&'"'
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Re: PROP:SQLFilter
Да loc:dn и loc:dk уже с двойными кавычками, изначально так созданы. Вот я и спрашиваю - а нужны ли эти кавычки вообще? Может здесь ошибка?
We are hard at work… for you.
Re: PROP:SQLFilter
Да в том-то все и дело, что выражение 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
Вот тут фигня написана: зачем перед opl.dat и после loc:dk лишние апострофы? Надоartgkx писал(а):А вот BRW1::View:Browse{PROP:SQLFilter} = '''opl.dat => '&loc:dn&' AND opl.dat <= '&loc:dk&'''' не работает
Код: Выделить всё
'opl.dat => '&loc:dn&' AND opl.dat <= '&loc:dk
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 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) &''''
С уважением, ДП
Re: PROP:SQLFilter
Для mssql это так
'opl.dat =>' &''''& CLIP(loc:dn) &''''&' AND opl.dat <=' &''''& CLIP(loc:dk) &''''
если loc:dn это date то так
'opl.dat =>' &''''& format(loc:dn,@d12)&''''......
'opl.dat =>' &''''& CLIP(loc:dn) &''''&' AND opl.dat <=' &''''& CLIP(loc:dk) &''''
если loc:dn это date то так
'opl.dat =>' &''''& format(loc:dn,@d12)&''''......
Re: PROP:SQLFilter
Уважаемые гуру. Это разные формы написания одной и той-же строки. В результате получается
'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." Но если я набрал эту-же строку вручную - сервер не ругается на синтаксис и фильтрует правильно.
В чем дело непонятно.
'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"'.
С уважением, ДП
Re: PROP:SQLFilter
В том то вся и засада, если подставить в PROP:SQLFilter просто строку 'opl.dat >= ''2011-03-01'' AND opl.dat <= ''2011-03-31''' , фильтр работает, а если строку сформированную, которую могу просмотреть и она выглядит точно также - облом.
На самом деле в фильтре больше переменных, так вот как только убираешь переменные Date преобразованные в строку, фильтр работает. Не судите строго - учусь. На .TPS вроде немного получается, на SQL попробовал - облом.
На самом деле в фильтре больше переменных, так вот как только убираешь переменные Date преобразованные в строку, фильтр работает. Не судите строго - учусь. На .TPS вроде немного получается, на SQL попробовал - облом.
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Re: PROP:SQLFilter
Спор ни о чём. Ставь stop(File{prop:SQL}) и смотри, какой запрос посылается серверу.
We are hard at work… for you.
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: PROP:SQLFilter
Первый дельный совет!kreator писал(а):Спор ни о чём. Ставь stop(File{prop:SQL}) и смотри, какой запрос посылается серверу.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса