Страница 1 из 1
Как заставить работать prop:SQLOrder?
Добавлено: 05 Сентябрь 2014, 10:50
kreator
C8.0.9759, ABC, Firebird 2.1. Есть стандартный броуз с несколькими вариантами сортировки, которые реализуются стандартно через SHEET и TABы. Одну сортировку мне надо задать через prop:SQLOrder. Как это правильно сделать? Попытка тупо присвоить вьюхе значение в методе ApplyOrder приводит к задвоению записей и прочей ерунде. С prop:Order проблем не вижу, всё чётко.
Re: Как заставить работать prop:SQLOrder?
Добавлено: 06 Сентябрь 2014, 12:21
Алексей- Софт-Центр
Добрый день.
Попробуйте добавить в ключ этого шита -первичный ключ таблицы.
Алексей
Re: Как заставить работать prop:SQLOrder?
Добавлено: 08 Сентябрь 2014, 10:17
kreator
Естественно, первичный ключ есть. И запрос на сервер уходит правильный. Может баг 8-ки?
Re: Как заставить работать prop:SQLOrder?
Добавлено: 09 Сентябрь 2014, 10:47
Алексей- Софт-Центр
Добрый день!
Попробуйте добавить уникальное ключевое поле последним в список order.
Может вот это поможет:
http://computer-programming-forum.com/1 ... 73c982.htm
Алексей
Re: Как заставить работать prop:SQLOrder?
Добавлено: 09 Сентябрь 2014, 12:46
kreator
Судя по этому старому форуму, проблема застарелая.
Я сделал эксперимент. Если пишу вот так:
Код: Выделить всё
BRW1::View:Browse{prop:Order} = '+SPR:KOD_SPR, +SPR:ID_SPR'
то всё нормально. А если так:
Код: Выделить всё
BRW1::View:Browse{prop:SQLOrder} = 'a.kod_spr, a.id_spr'
то всё плохо.
Запросы на сервер посылаются одинаковые. Может драйвер ODBC глючит? Ну раз такое дело, может кто подскажет, как перевести SQL синтаксис на кларионовский:
Код: Выделить всё
order by cast(a.kod_spr as char(10)), a.id_spr
Re: Как заставить работать prop:SQLOrder?
Добавлено: 09 Сентябрь 2014, 16:23
Admin
kreator писал(а):Запросы на сервер посылаются одинаковые. Может драйвер ODBC глючит? Ну раз такое дело, может кто подскажет, как перевести SQL синтаксис на кларионовский:
Посмотри описание функции SORT в справке Кларион. Там можно в качестве параметра задавать функцию. В которой пары, можешь сравнивать как хочешь!
Re: Как заставить работать prop:SQLOrder?
Добавлено: 09 Сентябрь 2014, 18:42
Алексей- Софт-Центр
Добрый день!
Я не пользовал sql order, но во всю использую sql filter.
Так вот все имена полей в prop пишу только большими буквами и без каких-либо префиксов.
Иначе запросы не работают.
В order я думаю так же
Алексей
Re: Как заставить работать prop:SQLOrder?
Добавлено: 09 Сентябрь 2014, 20:04
Губин Игорь
Код: Выделить всё
BRW1::View:Browse{prop:Order} = '+SPR:KOD_SPR, +SPR:ID_SPR'
Код: Выделить всё
BRW1::View:Browse{prop:SQLOrder} = 'a.kod_spr, a.id_spr'
А не в Evaluate тут засада? Ведь второй вариант явно идёт от файла, а при BIND получают обозначения с префиксом
Re: Как заставить работать prop:SQLOrder?
Добавлено: 10 Сентябрь 2014, 11:01
kreator
Admin писал(а):Посмотри описание функции SORT в справке Кларион. Там можно в качестве параметра задавать функцию. В которой пары, можешь сравнивать как хочешь!
SORT работает, например, если после формирования QUEUE в ResetQueue его выполнить, но при этом локатор не так работает (в принципе ерунда) и, что больше напрягает, сортировка у Clarion странная - "116-1" раньше "116" (Firebird сортирует наоборот, что правильно).
Алексей- Софт-Центр писал(а):Так вот все имена полей в prop пишу только большими буквами и без каких-либо префиксов.
В prop:SQL (prop:SQLFilter, prop:SQLOrder) под префиксом я понимаю "a.", "b.". Без такого, в принципе, нельзя, можно только, если одна таблица.
Губин Игорь писал(а):А не в Evaluate тут засада? Ведь второй вариант явно идёт от файла, а при BIND получают обозначения с префиксом
Игорь, а можно поподробнее, что это значит. Ведь prop:SQLFilter работает как надо. У меня много броузов с динамическими SQL фильтрами, никакими bind я не пользуюсь, и ошибок не замечено. Может, конечно, для SQLOrder всё по-другому.
Re: Как заставить работать prop:SQLOrder?
Добавлено: 10 Сентябрь 2014, 11:43
Губин Игорь
Я предположил, что тут {prop:SQLOrder} как-то отрабатывает через Evaluate, который обрабатывает то, что ему выдаёт BIND. А Бинд не занет об а.поле, а знает об прф:поле.
Re: Как заставить работать prop:SQLOrder?
Добавлено: 10 Сентябрь 2014, 15:32
kreator
Я сделал как в хелпе описано. И запрос посылается правильно. На самом деле при первом формировании броуза всё хорошо. Проблемы появляются при переключении закладок, при использовании того же локатора. Мои умозаключения такие. Я в методе ApplyOrder обнуляю заданный изначально prop:Order и он уже не восстанавливается. А другие методы (в, частности, локаторные) используют именно prop:Order. Похоже, кратковременная замена prop:Order на prop:SQLOrder работает на ура. А вот как подменить в самом классе это дело?