![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка в 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-запросе