|
|
|
сортировка по Lookup полям в гриде!?
|
|||
|---|---|---|---|
|
#18+
Нужно реализовать сортировку записей в гриде. Обычные поля сортирую двумя способами: 1-при клике на заголовке вставляю в запрос order by, 2-использую автоматическую сортировку DBgridEh. При сортировке обычных полей никаких проблем не возникает, но как отсортировать Lookup поле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 12:56 |
|
||
|
сортировка по Lookup полям в гриде!?
|
|||
|---|---|---|---|
|
#18+
А вот это вот интерестно :)) правда я обошел это джоинами итд , вывел т.е. аля лукап поля которые не показываею в гриде и по ним сортирую , чем плох мой вариант , с редактированием ж№па :( но если кто подскажет др. вариант я тоже не буду против :) ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 13:08 |
|
||
|
сортировка по Lookup полям в гриде!?
|
|||
|---|---|---|---|
|
#18+
а херня в том что другого способа на сколько я знаю просто нет :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 18:54 |
|
||
|
сортировка по Lookup полям в гриде!?
|
|||
|---|---|---|---|
|
#18+
Здесь затронули старую и больную тему: сортировка в Gride, связанном с базой. Причем в общем случае нужно сортировать не только по Lookup, но и по Calc полям. Насколько мне известно, хорошего компонента нет. Пару лет назад я пытался слелать DBGrid с сортировкой (наверняка многие пытались), сортировка в Gride не совпадает с сортировкой в DataSet, ну то есть DataSet (обычно в виде Query) пришел с сервера с какой-то сортировкой, накрутили Lookup и Calc поля, а затем в клиентском приложении сортируем как хотим. Проблема оказалась в следующем: при движении по гриду вверх и вниз в DataSet вместо обычных Next() и Prior(), приходится делать Locate причем в общем случае не известно по каким полям. Хорошо если просматриваеися первичный ключ или уникальный индекс, однако запрос может быть построен таким образом, что никакой уникальности не видно даже при хорошей структуре базы, т.е. либо слишком сложный SELECT, либо в SELECT не включены поля первичного ключа или уникального индекса. Делать Lacate по всем хранимым полям тоже не всегда полезно, т.к. могут быть повторяющиеся записи. Одним словом не получилось. Идея об отключении от DataSet, т.е. при перемещении по гриду не перемещяться по датасет тоже не очень хороша, т.к. при корректировке все проблемы останутся. Возможно кто нибудь знает решение этих проблем, хотя бы на идейно - теоретическом уровне, тогда компонент сделаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2004, 19:40 |
|
||
|
сортировка по Lookup полям в гриде!?
|
|||
|---|---|---|---|
|
#18+
2 SnowMan я думаю что ниче путнего сделать в принципе не возможно. по-моему разумению сортировать нужно не грид, а DataSet(кстати поднимался уже вопрос(точнее возмущение)почему нельзя было добавить в DataSet метод который бы пересортировывал уже вытянутые данные по указанному полю). Но здесь опять же есть проблемы. просто один раз пересортировать данные для удобства просмотра это одно дело, а вот сортировать по лукаповским и вычисляемым полям это совсем другое.... при педактировании по логике нужно каждый раз пересортировывать данные. ... а если отредактировать нужно пару тысячь записей .... а при этом если в DataSet пару миллионов записей ... ни у одного человека не найдется столько терпения чтоб переждать все это. Вот и получается что кривые и некрасивые методы описанные JibSkeart ( и использующиеся не только им) оказываются более предпочтительны (заметьте я не сказал что методы хорошие) а плане скорости выполнения. вот и получается что вся жизнь дерьмо ... ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 10:56 |
|
||
|
сортировка по Lookup полям в гриде!?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 11:23 |
|
||
|
сортировка по Lookup полям в гриде!?
|
|||
|---|---|---|---|
|
#18+
2 123456789098 То, что жизнь тяжела - это я полностью согласен. А вот то, что ничего путного нельзя сделать не согласен. В Вашем сообщении основной проблемой являлось быстродействие (на паре милионов строк). Естественно если при хранении данных пользоваться плоской таблицей и традиционными методами сортировки, то так и получится. Однако если пользоваться сбалансированным деревом, то кол-во операций при изменении одной записи (если это изменение привело к изменения порядка записей) пропорционально двоичному логарифму N, где N - кол-во записей. Двоичный логарифм от 2 000 000 равен 21. Такое перестроение дерева будет меньше секунды. Правда переодически нужно балонсировать дерево, чтобы отдельные ветви сильно не удлиннялись, это относительно медленно, в наихудшем случае порядка N, однако при большем дереве очень редко. Насчет изменения пары тысяч. Если изменять по одной записи, то время перекидывания листа дерева распределится на каждую операцию и не будет заментно. Если это какая либо контекстная замена на клиенте, то будет медленно. Однако контекстную замену чаще белают на сервере (UPDATE ...) c переоткрытием DataSet. Для реализации всего выше сказанного видимо надо переопределять Query, DataSet, DataSource и DBGrid. Так что правильно сказано, что жизнь тяжела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 12:38 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32375030&tid=2035535]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 335ms |

| 0 / 0 |
