Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сортировка в TOraQuery [D7, XP]


Onyx2012 ©   (2011-08-10 16:36:00) 

Добрый день.

Получаю данные в датасет компонента TOraQuery с установленным Cached Updates, далее проецирую их в cxGrid и начинаю в нем изменять поле ID.
После этого хочу отсортировать данные, но без использования средств cxGrid. То есть нужно, чтобы данные сначала отсортировались в самом TOraQuery и после уже автоматом в cxGrid.

Как это сделать?

SetOrderBy('ID'); результата не даёт, т.к. данные в таблице (cxGrid) после этого не сортируются.


Onyx2012   (2011-08-12 16:07:00) [1]

Да, я так решил - если понадобится сохранение данных в БД, то сделаю вычисляемое поле, а так - и rownum вполне выполнит задачу :)


OW   (2011-08-12 15:25:00) [2]

да не, все нормально
если выборка назад в БД не пойдет - то делать можно что угодно, имхо
Хотя.. может лучше вычисляемое поле какое ввести? и по нему сортировать.
на всякий.

или лучше ничего не трогать, раз работает... :)


Onyx2012   (2011-08-12 14:13:00) [3]


> Какие-то извращенные отношения с БД. ИМХО решение Вашей
> задачи кроется не там где Вы пытаетесь его найти...

Я решение уже нашел, спасибо. То, что мне было нужно - выполняется. Сама база данных при этом не трогается, я лишь получаю данные и далее могу модифицировать их как пожелается. Про Cached Updates я уже раза три написал: результат обратно в базу уже не пойдет. Поэтому никак не пойму ваших беспокойств. Если выгрузить данные в файл - это извращение, то не знаю тогда что тут сказать.


Dennis I. Komarov   (2011-08-11 16:31:00) [4]

Какие-то извращенные отношения с БД. ИМХО решение Вашей задачи кроется не там где Вы пытаетесь его найти...


Onyx2012   (2011-08-11 16:24:00) [5]


> Зачем? Дикость какая-то...

Допустим для последующего экспорта в эксель или еще куда. Да какая разница?


Ega23   (2011-08-11 12:47:00) [6]


>  и все что мне нужно - это предоставить возможность юзеру
> менять местами строки в таблице, причем только на клиенте.
>  Записываться же в саму базу эти изменения не будут.

Зачем? Дикость какая-то...


Onyx2012   (2011-08-11 11:46:00) [7]

А, вот вы о чем :) Все гораздо проще, ID на самом деле вообще не трогается, я привел его в качестве примера. Вместо него я тягаю rownum и все что мне нужно - это предоставить возможность юзеру менять местами строки в таблице, причем только на клиенте. Записываться же в саму базу эти изменения не будут. Ну, либо будут, но в каком-то другом ключе. Менять ID и записывать это все в базу я бы конечно не стал :)


OW   (2011-08-11 11:40:00) [8]

не Ега, но если бы спросили, сказал бы так

не трогать ID.
Id - это паспорт. Запись без id или со сменой id  - либо нелегал, либо шпиён
и жить в правовой БД не достоин :)

Поменять отношение
закоммитил - получил результат. Не закоммитил - никакого результата пока еще нет и нечего показывать ничего, стараясь сделать это покрасивее


Onyx2012   (2011-08-11 10:47:00) [9]

Ega23, поделить альтернативой :)


Ega23   (2011-08-11 10:45:00) [10]


> В этот момент должна произойти сортировка в датасете и записи
> должны упорядочиться след образом: 1, 2, 3, 3, 4, 5... И
> по-скольку записей под номер 3 у нас получается две - я
> пробегаюсь циклом с первой записи и прописываю им ID от
> единицы до последней записи.


Рука-лицо.


OW   (2011-08-11 10:42:00) [11]

за плохую практику не стоит благодарностей :)


Onyx2012   (2011-08-11 10:35:00) [12]


> или надо что-то вроде
> dataset.IndexFieldNames := 'ID';

Вот! То, что было нужно. Спасибо огромное :)


OW   (2011-08-11 10:30:00) [13]

да это понятно
но как ты будешь перезапрашивать, если не применяешь изменения.

или надо что-то вроде
dataset.IndexFieldNames := 'ID';
?


Onyx2012   (2011-08-11 10:18:00) [14]


> правильно
> потому что запись с номером 8 так и осталась с номером 8,
>
> т.к. >> TOraQuery с установленным Cached Updates,


Нет, Cached Updates позволяет изменять данные локально как душе будет угодно.
То есть в запись 8 записывает 3 - это видно сразу. Не получается только отсортировать.


OW   (2011-08-11 10:11:00) [15]


> Так вот из-за того, что у меня не производится сортировка,
>  запись с номером 8 остается на той же позиции, что и была
> и ей вновь прописывается значение 8.
>

правильно
потому что запись с номером 8 так и осталась с номером 8,
т.к. >> TOraQuery с установленным Cached Updates,


Onyx2012   (2011-08-11 10:10:00) [16]

А использовать order by в sql запросе я не могу, ибо работаю в режиме cached updates. То есть получаю датасет и уже работаю с ним локально на машине. Поэтому нужно иметь возможность оперировать данными в датасете без запросов.


Onyx2012   (2011-08-11 10:07:00) [17]


> oq1.SetOrderBy('ID_BRANCH');
>   oq1.Open;


Пробую, но сортировка не производится. Вообще сама задача - реализовать перенос строк в гриде. Есть ключевое поле 'ID', если я переношу запись под номером 8 на запись с номером 4, то в запись с номером 8 записываю 3. В этот момент должна произойти сортировка в датасете и записи должны упорядочиться след образом: 1, 2, 3, 3, 4, 5... И по-скольку записей под номер 3 у нас получается две - я пробегаюсь циклом с первой записи и прописываю им ID от единицы до последней записи.
Так вот из-за того, что у меня не производится сортировка, запись с номером 8 остается на той же позиции, что и была и ей вновь прописывается значение 8.


OW   (2011-08-11 09:50:00) [18]

oq1.SetOrderBy('ID_BRANCH');
  oq1.Open;

что фактически и приводит к


> для сортировки данных надо использовать order by в sql-запросе


Игорь Шевченко   (2011-08-10 18:22:00) [19]

для сортировки данных надо использовать order by в sql-запросе


Наверх

Титульная страница Поиск, карта сайта Написать письмо