Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.04;
Скачать: CL | DM;

Вниз

Сортировка в TOraQuery   Найти похожие ветки 

 
Onyx2012   (2011-08-10 16:36) [0]

Добрый день.

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

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

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


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

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


 
OW ©   (2011-08-11 09:50) [2]

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

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


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


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


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


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


 
Onyx2012   (2011-08-11 10:10) [4]

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


 
OW ©   (2011-08-11 10:11) [5]


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

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


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


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


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


 
OW ©   (2011-08-11 10:30) [7]

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

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


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


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

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


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

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


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


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


Рука-лицо.


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

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


 
OW ©   (2011-08-11 11:40) [12]

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

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

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


 
Onyx2012   (2011-08-11 11:46) [13]

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


 
Ega23 ©   (2011-08-11 12:47) [14]


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

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


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


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

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


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

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


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


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

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


 
OW ©   (2011-08-12 15:25) [18]

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2011.12.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.007 c
2-1313232602
КирилКА
2011-08-13 14:50
2011.12.04
Combobox


15-1312983697
DevilDevil
2011-08-10 17:41
2011.12.04
Какой самый живой форум по программированию Excel отчётов?


15-1312576193
Юрий
2011-08-06 00:29
2011.12.04
С днем рождения ! 6 августа 2011 суббота


2-1313563381
fzt
2011-08-17 10:43
2011.12.04
как обработать исключение в чужой функции?


15-1313278200
Юрий
2011-08-14 03:30
2011.12.04
С днем рождения ! 14 августа 2011 воскресенье