Как заставить работать prop:SQLOrder?

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Как заставить работать prop:SQLOrder?

Сообщение kreator »

C8.0.9759, ABC, Firebird 2.1. Есть стандартный броуз с несколькими вариантами сортировки, которые реализуются стандартно через SHEET и TABы. Одну сортировку мне надо задать через prop:SQLOrder. Как это правильно сделать? Попытка тупо присвоить вьюхе значение в методе ApplyOrder приводит к задвоению записей и прочей ерунде. С prop:Order проблем не вижу, всё чётко.
We are hard at work… for you. :)
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Как заставить работать prop:SQLOrder?

Сообщение Алексей- Софт-Центр »

Добрый день.

Попробуйте добавить в ключ этого шита -первичный ключ таблицы.

Алексей
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как заставить работать prop:SQLOrder?

Сообщение kreator »

Естественно, первичный ключ есть. И запрос на сервер уходит правильный. Может баг 8-ки?
We are hard at work… for you. :)
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Как заставить работать prop:SQLOrder?

Сообщение Алексей- Софт-Центр »

Добрый день!
Попробуйте добавить уникальное ключевое поле последним в список order.
Может вот это поможет:
http://computer-programming-forum.com/1 ... 73c982.htm

Алексей
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как заставить работать prop:SQLOrder?

Сообщение 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
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Как заставить работать prop:SQLOrder?

Сообщение Admin »

kreator писал(а):Запросы на сервер посылаются одинаковые. Может драйвер ODBC глючит? Ну раз такое дело, может кто подскажет, как перевести SQL синтаксис на кларионовский:
Посмотри описание функции SORT в справке Кларион. Там можно в качестве параметра задавать функцию. В которой пары, можешь сравнивать как хочешь!
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Как заставить работать prop:SQLOrder?

Сообщение Алексей- Софт-Центр »

Добрый день!
Я не пользовал sql order, но во всю использую sql filter.
Так вот все имена полей в prop пишу только большими буквами и без каких-либо префиксов.
Иначе запросы не работают.
В order я думаю так же

Алексей
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2584
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Re: Как заставить работать prop:SQLOrder?

Сообщение Губин Игорь »

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

BRW1::View:Browse{prop:Order} = '+SPR:KOD_SPR, +SPR:ID_SPR'

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

BRW1::View:Browse{prop:SQLOrder} = 'a.kod_spr, a.id_spr'
А не в Evaluate тут засада? Ведь второй вариант явно идёт от файла, а при BIND получают обозначения с префиксом
Это я только кажусь дураком! На самом деле я полный идиот!
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как заставить работать prop:SQLOrder?

Сообщение 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 всё по-другому.
We are hard at work… for you. :)
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2584
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Re: Как заставить работать prop:SQLOrder?

Сообщение Губин Игорь »

Я предположил, что тут {prop:SQLOrder} как-то отрабатывает через Evaluate, который обрабатывает то, что ему выдаёт BIND. А Бинд не занет об а.поле, а знает об прф:поле.
Это я только кажусь дураком! На самом деле я полный идиот!
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как заставить работать prop:SQLOrder?

Сообщение kreator »

Я сделал как в хелпе описано. И запрос посылается правильно. На самом деле при первом формировании броуза всё хорошо. Проблемы появляются при переключении закладок, при использовании того же локатора. Мои умозаключения такие. Я в методе ApplyOrder обнуляю заданный изначально prop:Order и он уже не восстанавливается. А другие методы (в, частности, локаторные) используют именно prop:Order. Похоже, кратковременная замена prop:Order на prop:SQLOrder работает на ура. А вот как подменить в самом классе это дело?
We are hard at work… for you. :)
Ответить