Форум: "Базы";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизKак пересортировать таблицу после изменения поля в самой таблице? Найти похожие ветки
← →
Rentgen © (2006-08-18 08:28) [0]Всем привет!
Подскажите пожалуйста:
Есть ДБГрид и СКЛ-запрос с сортировкой.
как пересортировать таблицу после изменения поля в самой таблице?
т.е. если изменить сортирующее поле, то должна пройти пересортировка.
компоненты:
DBGrid;
DataSource;
ADOQuery;
ADOConnection.
BDS2006
Acces2006
← →
sniknik © (2006-08-18 08:38) [1]ничего не делать... т.к.
> если изменить сортирующее поле, то должна пройти пересортировка.
если его изменить то сортировка таки происходит... подозрение правда что ты не там/не то меняеш... ну да это не проблема, меняй там и то.
← →
Rentgen © (2006-08-18 08:57) [2]дело в том, что пользователь меняет значение в самом Гриде.
после изменений в гриде ничего у меня не обновляется и не
пересортировывается :(
где-то видимо нужно параметр выставить.
подскажите?
← →
sniknik © (2006-08-18 09:06) [3]> после изменений в гриде ничего у меня не обновляется и не
> пересортировывается :(
значит у тебя нет отсортированного поля, то в каком порядке поля получены с сервера это не сортировка, вернее не локальная сортировка а на стороне сервера все правила которой там на сервере и остались...
> где-то видимо нужно параметр выставить.
там где данные, параметр(вернее метод) с таким ну совсем уж неассоциируемым ;о) названием - Sort. (ни за что не догадаться.... :о)))))
← →
Rentgen © (2006-08-18 09:35) [4]Или мы друг-друга не понимаем или я туплю, НО:
есть грид привязанный к DatSet.
DataSet привязан к ADOQuery.
ADOQuery к ADOConnection.
У ADOQuery строка SQL: "SELECT * FROM Nominal ORDER BY IndSort"
далее меняем в гриде поле в столбце IndSort , жмем интер, но строка стоит на месте.
т.е.
Грид:
1
2 - меняем на 5 (должно перейти после 4).
3
4
** ничего не происходит :(
← →
Rentgen © (2006-08-18 09:37) [5]да и еще:
комманда
ADOQuery -> Requery();
дает нужный результат.
можно конечно поставить её на АфтерПост, но(!)
данные меняются не только юзером в гриде, но и программно. вообщем будет както не правильно после каждого поста делать реквери :(
← →
roottim © (2006-08-18 09:49) [6]Прикрутить волшебную кнопку "Обновить" и повесить хоткей. Когда захочет юзер свежую информацию - тогда он ее и получит.
> данные меняются не только юзером в гриде, но и программно
что? одновременно ? тогда колизии неизбежны.
← →
Rentgen © (2006-08-18 09:58) [7]
> Прикрутить волшебную кнопку "Обновить"
хочется интерактивности
> что? одновременно ?
к счастью нет :). просто неправильно истолковал.
может есть ещё идеи по сабжу?
← →
roottim © (2006-08-18 10:02) [8][3]
← →
Stanislav © (2006-08-18 10:02) [9]Rentgen © (18.08.06 09:58) [7]
sniknik © (18.08.06 09:06) [3] - Sort.
Есть еще гриды, которые сами сортируют.
← →
Dok (2006-08-18 10:18) [10]
> Есть еще гриды, которые сами сортируют.
>
а ага на миллионе записей :)
← →
Dok (2006-08-18 10:19) [11]
> Rentgen © (18.08.06 09:58) [7]
>
>
> > Прикрутить волшебную кнопку "Обновить"
>
> хочется интерактивности
на больших обемах будешь ждать, интерактивность это если у тебя управление ядерным реактором или ракетой, в остальных случайях бесполезная фича для тупых пользователей.
← →
Dok (2006-08-18 10:21) [12]
> данные меняются не только юзером в гриде, но и программно.
> вообщем будет както не правильно после каждого поста делать
> реквери :(
вот это умная мысль.
← →
sniknik © (2006-08-18 10:55) [13]> У ADOQuery строка SQL: "SELECT * FROM Nominal ORDER BY IndSort"
после выполнения этого запроса
ADODataSet1.Sort:= "IndSort";
> 2 - меняем на 5 (должно перейти после 4).
а теперь? (меняется значение в рекордсере на переходе с записи на запись, до этого оно в "инплейсеэдит-е")
← →
Stanislav © (2006-08-18 11:10) [14]Dok (18.08.06 10:18) [10]
Зачем миллион на клиенте?
← →
Dok (2006-08-18 11:33) [15]
> Stanislav © (18.08.06 11:10) [14]
>
> Dok (18.08.06 10:18) [10]
> Зачем миллион на клиенте?
Затем чтобы получить корректную сортировку. Если ты выберешь не все записи и будешь сортироать на клиенте - то достоверность этих данных 0. Если на сервере отсортируешь и выберешь 100 , то тогда тебе ставится 5-ка.
← →
Rentgen © (2006-08-18 11:47) [16]
> sniknik © (18.08.06 10:55) [13]
>
> > У ADOQuery строка SQL: "SELECT * FROM Nominal ORDER BY
> IndSort"
> после выполнения этого запроса
> ADODataSet1.Sort:= "IndSort";
Вот оно!!!
работает!!!
спасибо!!!
(Query1.Sort := "IndSort";)
← →
Dok (2006-08-18 12:24) [17]
> Вот оно!!!
> работает!!!
> спасибо!!!
> (Query1.Sort := "IndSort";)
профайлер запусти
← →
sniknik © (2006-08-18 13:24) [18]> профайлер запусти
и что там смотреть? особенно с учетом того что база Acces2006, (!!!!) кстати, 2006 (????), ладно неважно, главное что это скорее всего mdb. (т.е. не программа access имеется в виду, а база)
p.s. это локальная сортировка(создание индекса на клиенте), если конечно тип у рекордсета локальный (что так и есть потому как Sort на серверном курсоре не работает, вернет ошибку), можно даже таблицу вовсе от коннекта оторвать ничего не изменится (т.е. даже если бы была возможность запустить профайлер, он бы ничего не показал, мы и данные от конекта отключили и сам конект закрыли, а оно все равно работает.)
а ты думал оно перезапрос делает?
← →
Dok (2006-08-18 14:43) [19]
> и что там смотреть? особенно с учетом того что база Acces2006,
> (!!!!) кстати, 2006 (????), ладно неважно, главное что
> это скорее всего mdb. (т.е. не программа access имеется
> в виду, а база)
сорри , думал мс скл
← →
Stanislav © (2006-08-18 15:02) [20]Dok (18.08.06 11:33) [15]
???
Ниче непонял.
Все правильно там отсортируется.
← →
Dok (2006-08-18 15:25) [21]
> Все правильно там отсортируется.
Где правильно отсортируется? Локально? Без закачки всех записей?
← →
evvcom © (2006-08-18 15:46) [22]> [21] Dok (18.08.06 15:25)
> Без закачки всех записей?
Что ты называешь закачкой всех записей? Возвращенных запросом (он далеко не обязательно миллион вернет) или всех возможных записей таблиц(ы)?
← →
Dok (2006-08-18 16:04) [23]
> Что ты называешь закачкой всех записей? Возвращенных запросом
> (он далеко не обязательно миллион вернет) или всех возможных
> записей таблиц(ы)?
Вам нужно отсиртировать набор данных из БД? Вы выполняете запрос: select * from table. Фитчите 50 записей. И сортируете локально. Где гарантия что если бы Вы отсортировали на сервере, то в эти 50 записей попали бы тоже эти 50 записей?
← →
Stanislav © (2006-08-18 16:06) [24]Dok (18.08.06 15:25) [21]
На клиенте. Конечно без закачки всех записей.
Допустим в таблице хранятся все ученики города их 100000, а мне нужно только 1-А класс 5-й школы, я отберу запросом только 40 записей, соответствующих этому классу и отсортирую по порядку на клиенте - и все будет правильно.
← →
Dok (2006-08-18 16:36) [25]
> На клиенте. Конечно без закачки всех записей.
> Допустим в таблице хранятся все ученики города их 100000,
> а мне нужно только 1-А класс 5-й школы, я отберу запросом
> только 40 записей, соответствующих этому классу и отсортирую
> по порядку на клиенте - и все будет правильно.
что будет правильно? допустим между буквами А и Я выкинутся М и К, а сортировка на клиенте скажет что таких нет школьников, вот если бы ты на сервере сорировал то без вопросов.
← →
Stanislav © (2006-08-18 16:47) [26]А зачем мне видеть М и К с других школ?
← →
Dok (2006-08-18 16:49) [27]
> А зачем мне видеть М и К с других школ?
почему же других, этой же школы. Они идут 41 и 42 записями.
← →
saxon (2006-08-18 16:55) [28]
> А зачем мне видеть М и К с других школ?
Чтоб пойти и в бубен им надавать. :))
Это он к тому что, надо всетаки сортировать на сервере, а вот уж из уже сортированных тянуть на клиент тока 40 (ну или стока скока надо).
← →
Stanislav © (2006-08-18 16:58) [29]Если этого - же класса, то попадут и они
Такая структура:
ID
IDSCHOOL
IDCLASS
FIO
Я отбераю Select * from UCHEN WHERE IDSCHOLL=543 AND IDCLASS=1
А на клиенте сколько записей пришло с сервера столько и отсортирую хоть 1 хоть 100 хоть все.
← →
Dok (2006-08-18 17:11) [30]
> Если этого - же класса, то попадут и они
С какой это стати? Если Вы зафитчите 40?
Выборка возвращает:
А
Б
Я
...
Ж --- 40-я
М --- 41-я
К --- 42-я
Сортировка локально:
А
Б
Ж --- М и К отсутсвуют
...
Я
На сервере:
А
Б
К
М
...
Ж
Чувствуем разницу?
← →
Stanislav © (2006-08-18 17:18) [31]а я не буду фитчить 40, я отберу по параметру в SQL запросе, сколько попадет, столько попадет, но не 100000. Я же нигде не указал конкретно вернуть 40 записей, если бы я написал
Select TOP 40 * from UCHEN WHERE IDSCHOLL=543 AND IDCLASS=1
Тогда другой вопрос.
← →
Dok (2006-08-18 17:44) [32]ну в общем то да. но сортировать на клиенте - это ламерство. имхо.
← →
Anatoly Podgoretsky © (2006-08-18 23:42) [33]Rentgen © (18.08.06 09:58) [7]
> Прикрутить волшебную кнопку "Обновить"
хочется интерактивности
Это интерактивность в самом чистом виде.
← →
Anatoly Podgoretsky © (2006-08-18 23:45) [34]Dok (18.08.06 10:19) [11]
Не путаешь с real time, а говоришь про интерактивность?
← →
Stanislav © (2006-08-19 11:20) [35]Dok (18.08.06 17:44) [32]
Ламерство? помоему ламерство это нагружать сервер ненужными сортировками.
У меня в сети работает одновременно 150 чел. Первоначальный запрос я отдаю юзеру отсортированный естественно на сервере, а остальные сортировки, которые хочется дяде Васе или тете Маше, делаются локально, неперезапрашивать же запрос на сервере из-зи того что тетя Маша хочет видеть другую сортировку.
← →
evvcom © (2006-08-21 08:45) [36]> [23] Dok (18.08.06 16:04)
Ты перепутал мухи и котлеты. Как ты в [32] говоришь? Ламерство? Вот запросы
> select * from table
и есть ламерство. Мое имхо. Без обид. Естественно такой запрос потянет мулик записей на клиента. И не только локальная машина умрет на сортировке, но и крутому серваку придется нелегко сортировать миллион записей. Потому
> [15] Dok (18.08.06 11:33)
> > Stanislav © (18.08.06 11:10) [14]
> > Dok (18.08.06 10:18) [10]
> > Зачем миллион на клиенте?
> Затем чтобы получить корректную сортировку.
тоже то ли ламерство, то ли еще что-то. Естественно корректная сортировка не получится без фетча "всех" записей, но всех - это тех, которые вернул запрос, а не всего миллиона. Так что давай разделяй там у себя, мухи отдельно, котлеты отдельно.
P.S. Кстати, не знаю как eh-грид, а у dx не доступна локальная сортировка без флага FetchAllRows.
← →
Dok (2006-08-21 10:32) [37]
> Ламерство? помоему ламерство это нагружать сервер ненужными
> сортировками.
> У меня в сети работает одновременно 150 чел. Первоначальный
> запрос я отдаю юзеру отсортированный естественно на сервере,
> а остальные сортировки, которые хочется дяде Васе или тете
> Маше, делаются локально, неперезапрашивать же запрос на
> сервере из-зи того что тетя Маша хочет видеть другую сортировку.
>
Первоначальный запрос у тебя всегда меньше 100 записей? Или другими словами - как ты определяешь, что сервер не надо загружать такой сортировкой, пусть клиент сортирует?
← →
Dok (2006-08-21 10:34) [38]
> select * from table
>
> и есть ламерство. Мое имхо. Без обид. Естественно такой
> запрос потянет мулик записей на клиента. И не только локальная
> машина умрет на сортировке, но и крутому серваку придется
> нелегко сортировать миллион записей
ничего страшного в этом запросе нет, если не фитчить все записи
← →
Dok (2006-08-21 10:37) [39]
> тоже то ли ламерство, то ли еще что-то. Естественно корректная
> сортировка не получится без фетча "всех" записей, но всех
> - это тех, которые вернул запрос, а не всего миллиона.
Зашла Маша, включила прогу, ей загрузились на текущий момент данные. Она сидит себе сортирует, отчеты строит. Тут другая Катя доводила еще 10 записей. И после этого директор звонит Маше и говорит - Машенька а дайка мне отчет по том-то и том-то. Умначая Машенька печата отчет и бежит к директору с данными без введенных Кати.
← →
Stanislav © (2006-08-21 12:06) [40]Запрос всегда меньше 1000000 записей.
Никак не определяю, основное время занимает не сортировка, а перезапрос , ты же не сможешь отсортировать на сервере без перезапроса.
Имеется ввиду оперативная работа, отчет всегда строится на основании запроса к серверу.
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.039 c