Форум: "Начинающим";
Текущий архив: 2011.12.04;
Скачать: [xml.tar.bz2];
Вниз
Сортировка в 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c