Страница 1 из 1

Подскажаите, а как быть с сотрировкой???

Добавлено: 13 май 2008, 06:37
Antoxa
В IBDataSet.SQL написано:
SELECT *
FROM Table1
ORDER BY FIELD3;

В таблице 3 записи, у который FIELD3=1,2,3 соответственно.

Меняю значения поля в 2-х записях местами, например 2 и 3, но записи не переупорядочиваются. В ADO+Gemini срузу менялись местами записи в Grid-е, а ч-з IBX как, неужели необходимо делать Close, Open??? :?

Добавлено: 13 май 2008, 07:54
Tonal
Кто у тебя выполняет запрос?
Если сервер - нужно этот запрос ему переслать. Что и делает Open после Close.
А если не сервер - то нафига вообще с SQL-ем заморачиваться - сортируй на клиенте результат как тебе нужно. :-)

Добавлено: 13 май 2008, 11:06
Antoxa
Tonal писал(а):Кто у тебя выполняет запрос?
Если сервер - нужно этот запрос ему переслать. Что и делает Open после Close.
А если не сервер - то нафига вообще с SQL-ем заморачиваться - сортируй на клиенте результат как тебе нужно. :-)
У меня связка IBDatabase1+IBDataSet1+IBTransaction1
получается, что сервер... Т.е. нужно считывать ID, затем close, open, затем locate на сохраненный ID ??? :shock:

Добавлено: 13 май 2008, 11:22
kdv
получается, что сервер...
получается, что ты не понимаешь.

если ты выдаешь запрос с указанием сортировки в order by, то сортировкой занимается СЕРВЕР, а не клиент. Клиент всегда только принимает записи с сервера, и он вообще понятия не имеет, сортированы эти записи или нет, и по какому критерию.
Клиент может сам отсортировать принятый массив записей, т.е. собственный буфер. Но опять же, сортировка эта пойдет только в явно заданном на клиенте виде, который может не совпадать с тем, в каком порядке сервер прислал запрос.
В ADO+Gemini срузу менялись местами
это значит, что ADO целиком перевыполняло запрос. Другие объяснения тут вряд-ли могут быть. Я сомневаюсь, что в ADO есть парсер запроса, который поймет что в запросе был ORDER BY, и при вставке записи правильно пересортирует локальный буфер.

Теперь понятно?

Добавлено: 13 май 2008, 19:08
Antoxa
kdv писал(а):Теперь понятно?
Ну, почти... :oops: А как же без ORDER BY отсортировать, т.е., как выполнить локальную сортировку, ведь у IBX компонентов нет процедуры sort...?

Добавлено: 14 май 2008, 13:21
zz 5
Решение есть ! Либо сортировать массив вручную, как советовал kdv, либо использовать библиотеку FIBPlus,
в которой все уже реализовано 8).

Теперь цитирую из справки:
TFIBCustomDataSet.DoSortEx: Sorts records without reopening a query on the server.
Кстати, в FIBPlus есть настройка, позволяющая сохранять позицию измененной записи в отсрортированном НД.

Добавлено: 14 май 2008, 13:52
Tonal
Я использовал связку TEhDbGrid + TMemTableEh + IBX.

Добавлено: 14 май 2008, 14:53
Antoxa
Tonal писал(а):Я использовал связку TEhDbGrid + TMemTableEh + IBX.
Пока беду ч-з close, open, locate, т.к. в таблице будет 5-10 записей... А для дугих случаев (если будет необходимость) посмотру FIB, но там говорят в новой версии ошибок много, даже называют ее beta! :cry:

Добавлено: 14 май 2008, 14:56
Antoxa
А у Fib сайт весь в вирусах опять... :evil:

Добавлено: 14 май 2008, 19:07
kdv
А у Fib сайт весь в вирусах опять..
может и опять, но вирусняк тот же самый.

Добавлено: 15 май 2008, 07:41
Antoxa
kdv писал(а):может и опять, но вирусняк тот же самый.
Видимо он и не исчезал!!!