Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1267690972
DenProx
2010-03-04 11:22
2011.12.04
Loockup поле с помощью SQL


15-1309448004
R_R
2011-06-30 19:33
2011.12.04
Фундаментальные шахматы...


2-1313583080
rammic
2011-08-17 16:11
2011.12.04
MemoryStream.SetSize не слушается


15-1304575753
samalex2504
2011-05-05 10:09
2011.12.04
Нет копирования содержимого компонентов Delphi в Excel и Word


2-1312987253
kalten
2011-08-10 18:40
2011.12.04
назначение горячих клавиш





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский