Страница 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 работает на ура. А вот как подменить в самом классе это дело?