Форум: "Базы";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
ВнизСортировка ADODataSet Найти похожие ветки
← →
Ega23 © (2007-03-13 16:35) [0]Есть ADODataSet с открытым набором данных.
Как его сортировать по разным столбцам на клиенте, не переоткрывая? IndexDefs добавлять?
← →
Jan (2007-03-13 16:38) [1]ADOQuery1.Sort := "LastName ASC, DateDue DESC"
Note: If the cursor is client-side (the dataset component’s CursorLocation property or that of an associated TADOConnection component is clUseClient) and no index already exists matching the requested field sort order, a temporary index is created. Resetting the sort order by setting Sort to an empty string automatically deletes the temporary index.
← →
sniknik © (2007-03-13 16:38) [2]проще метод sort использовать.
← →
Ega23 © (2007-03-13 16:38) [3]
> Jan (13.03.07 16:38) [1]
Оно. Спасибо.
← →
Ega23 © (2007-03-13 16:39) [4]
> проще метод sort использовать.
Да, про этот не знал. Бум знать.
← →
Ega23 © (2007-03-13 17:39) [5]Ух ты!
Какое хорошее свойство!
← →
MsGuns © (2007-03-13 21:06) [6]>Ega23 © (13.03.07 17:39) [5]
>Какое хорошее свойство!
Там еще кое-что вкусное есть. Например, ReQuery
← →
Ega23 © (2007-03-14 08:57) [7]
> Например, ReQuery
Этот я знаю. Я некую свою обёртку использую.
← →
Jan (2007-03-14 09:03) [8]
> MsGuns © (13.03.07 21:06) [6]
ага и еще Properties где развернуться можно :)
← →
DimonS © (2007-03-15 09:06) [9]А еще вот такая конструкция есть, ее постоянно и использую:
procedure TFrSpr.DBGridEh4TitleBtnClick(Sender: TObject; ACol: Integer;
Column: TColumnEh);
begin
TAdoDataset(DbgridEh1.DataSource.dataset).Sort := Column.FieldName;
end;
← →
logslava (2007-03-27 11:16) [10]Позвольте оживить сабж....
Проблема в том, что Sort не сортирует по lookup-полям датасета..
Можно ли как-то сортировать по таким полям не выполняя ПЕРЕ-запроса типа
...SQL.Text := "select .... order by MyField desc"
...SQL.Text := "select .... order by MyField asc"
← →
Ega23 © (2007-03-27 11:19) [11]
> Проблема в том, что Sort не сортирует по lookup-полям датасета.
И не должен.
← →
logslava (2007-03-27 11:25) [12]может быть, я в Борланде не работаю...
И все-таки, как это делается?
Ну не логично как-то перекачивать все данные снова от сервера на мой клиент только лишь для изменения порядка отображения... Ведь сами данные-то не изменились и это заведомо известно.
← →
stone © (2007-03-27 11:31) [13]
> logslava (27.03.07 11:25) [12]
Как вариант - отказаться от лукап-полей
← →
logslava (2007-03-27 11:36) [14]stone, вы серьезно?
← →
Плохиш © (2007-03-27 11:38) [15]
> logslava (27.03.07 11:25) [12]
Если данные не меняэтся, то выкинуть все лукап-поля и включить их в запрос.
← →
stone © (2007-03-27 11:39) [16]
> logslava (27.03.07 11:36) [14]
> stone, вы серьезно?
Вполне, для отображения в гриде лукап-поля не нужны, а пользоваться ими для ввода данных никто не мешает. Если же данные вводятся непосредственно в гриде, можно написать обработчик, который при попытке сортировать по лукап-полю, будет сортировать по какому надо.
← →
logslava (2007-03-27 11:53) [17]2 Плохиш
Данные не меняются - это я в том смысле, что в случае, когда пользователь смотрит на список (наример как в моем случае) покупок и хочет отсортироваеть его сначала по дате, потом по наименованию, потом еще по чему нибудь он не меняет данных в базе, зачем же в таком случает вновь выполнять запрос и вновь закачивать их в датасет?
Речь не идет о каких-то постоянных, никем не изменяемых данных
2 stone
> для отображения в гриде лукап-поля не нужны
Не нужны т.к. можно как-то иначе эти данные выудить, не через создание lookup в датасете? (я пока другого способа не знаю)
Или же вы имеете ввиду, что лучше вообще избежать их показа пользователю? В моей задаче отображая список покупок нужно отображать и поставщика. Все данные о поставщиках - в справочнике, а связь со справочником таблиц через VendorID
← →
stone © (2007-03-27 11:57) [18]
> logslava (27.03.07 11:53) [17]
Что мешает отображать в гриде результат запроса с уже готовыми полями, отображающими список покупок и поставщика. Сортировать можно будет как угодно.
← →
MsGuns © (2007-03-27 12:16) [19]> не сортирует по lookup-полям датасета.
Что за бред ?
← →
Плохиш © (2007-03-27 12:29) [20]
> Не нужны т.к. можно как-то иначе эти данные выудить, не
> через создание lookup в датасете? (я пока другого способа
> не знаю)
Пора пойитать про связи таблиц в запросах.
← →
Jan (2007-03-27 12:32) [21]лукап - это пережиток. давно уже все делают через join +
самописные контролы или EhLib.
← →
Jan (2007-03-27 12:34) [22]только вот сортировать не рекомендую по left join, лучше сделать два запроса(в одном данные получают через join, а во втором not exists фильтр) и обьеденить их union all.
← →
MsGuns © (2007-03-28 09:06) [23]>Jan (27.03.07 12:34) [22]
глупости
← →
Jan (2007-03-28 10:16) [24]
> MsGuns © (28.03.07 09:06) [23]
Отсортируй в MS SQL по полю которое берется из таблицы, которая присоедена left join. Только так чтобы у тебя в главной было тыс так 200 и в присоедененной тыс 300 и посмотри через сколько минут у тебя база tempdb загнется.
← →
sniknik © (2007-03-28 10:39) [25]> через сколько минут у тебя база tempdb загнется.
tempdb про эту сортировку даже не "догадается", т.к. sort это клиентский метод. и неважно по чему обьеденен начальный запрос, все одно действие над результирующем рекордсетом.
т.что предложенная проба из [24] бессмыслена.
← →
Jan (2007-03-28 10:48) [26]а что будет если я выбрал первые 100 записей? смысл их сортировать на клиенте?
← →
sniknik © (2007-03-28 11:10) [27]а прочитать собственно вопрос обсуждения в [0]? прежде чем давать советы, даже не зная применительно к чему.
← →
Jan (2007-03-28 11:13) [28]это понятно, но вообще-то тема ушла в сторону. на лукап поля и т.п.
← →
Kostafey © (2007-04-17 03:35) [29]У меня появилась аналогичная проблема. Нужно сделать сортировку по LookUp-полям.
И сразу несколько вопросов по ветке:
> procedure TFrSpr.DBGridEh4TitleBtnClick(Sender: TObject;
> ACol: Integer;
> Column: TColumnEh);
И когда такое событие происходит ?
> > не сортирует по lookup-полям датасета.
>
> Что за бред ?
ADODataSet1.Sort:=ADODataSet1LookTipMeropr.FieldName;
Где ADODataSet1LookTipMeropr - lookup- поле не работает.
> лукап - это пережиток. давно уже все делают через join +
>
> самописные контролы или EhLib.
А это что такое. Я имел в виду самописные контролы?
Если попытаться из всей ветки сделать вывод, то можно ли судить о том, что сортировка
по LookUp - полям невозможна (в том числе и в EhGrid), а уж тем более задание фильтра
вывода записей на основе LookUp - полей ?
В этом случае (для целей сортировки и фильтрации) лучше иметь независимый набор данных который
будет исключительно средствами SQL работать с базой данных с последующим выводом например в EhGrid, а
для ввода и модификации данных отдельно использовать уже стабильно работающие наборы данных с LookUp-полями.
Кроме того, для модификации данных в любом случае потребуется набор данных, содержащий все записи таблицы.
Основной недостаток - необходимость для каждой сетки (EhGrid) настраивать DiplayLabel и проч. в зависимости
от выводимого списка полей. В случае с заданными заранее пролями это удобнее.
← →
Jan1 (2007-04-17 10:18) [30]Те Лукап-поля которые реализованы в Делфе - большая пакость. Это источник тормозов и неправильного подхода к проектированию клиентских приложений. Лукап можно спокойно, а главное оптимально реализовать самому. Например, есть две таблицы одна главная другая справочная. Запрос:
select m.id, m.name, m.detail_id, d.name as detail_name
from Master m
left join Detail d on d.id = m.detail_id
Выведет ту же информацию, что и с лукап-поля из Делфи, но(!) быстрее на порядок, с возможность сортировки и фильтрации. Осталось только контролы прикрутить.
← →
Megabyte © (2007-04-17 11:14) [31]1)А каким образом ты сделаешь, чтобы в гриде, кот. выдает данные с джойном, можно было редактировать данные, чтобы не вводить всякие там ключи, а выбирать значения из выпадающего списка справочных таблиц(как в лукап-комбобокс-полях)?
Все равно придется отдельные НД делать для справочников...
2) В чем выражается "тормознутость и неправильный подход к проектированию клиентских приложений" пакостных лукап-полей?
Я не придираюсь, просто интересно!
← →
Jan1 (2007-04-17 11:40) [32]1. Можно подменить контрол, который в зависимости от кол-ва записей в справочнике, будет или кнопку показывать, по нажатию на которую форма с выбором значений - это когда записей больше скажем > 20, или комбобоксик рисовать, если записей <= 20. Да но создавать нужный набор нужно будет только тогда, когда пользователь захочет, а не всегда - как это с лукап-полем.
2. А в том как это все релизовано и как это все работает. Особенно это заметно на больших обьемах.
← →
Kostafey © (2007-04-17 12:23) [33]Что-то я не понял, а к чему приведет редактирование (Edit/Insert) набора данных,
построенного на нескольких таблицах ? Например как:
> select m.id, m.name, m.detail_id, d.name as detail_name
> from Master m
> left join Detail d on d.id = m.detail_id
Это же, например, insert произойдет и в Master и в Detail ?
← →
Jan1 (2007-04-17 12:26) [34]
> Это же, например, insert произойдет и в Master и в Detail
> ?
читал?
http://delphikingdom.ru/asp/viewitem.asp?catalogid=413
И тут все будет полезно:
http://delphikingdom.ru/asp/itemq.asp?mode=1&itemid=128
← →
Jan1 (2007-04-17 12:28) [35]> Это же, например, insert произойдет и в Master и в Detail
> ?
обшибся.
http://delphikingdom.ru/asp/viewitem.asp?catalogid=420
← →
Kostafey © (2007-04-17 12:34) [36]> [34] Jan1 (17.04.07 12:26)
Спасибо, читаю.
← →
Megabyte © (2007-04-17 13:45) [37]
> Jan1 (17.04.07 11:40) [32]
1)А в том как это все релизовано и как это все работает.
2)Особенно это заметно на больших обьемах.
1) Ну хз, я не замечал, хотя скажу, что и не так много делал, чтоб заметить.
2)Ну теоретически разве что на больших объемах справочных таблиц. Но справочников больших объемов пока что не видел ни в одном проекте(в том числе и в чужом).
← →
Jan1 (2007-04-17 13:55) [38]
> 1) Ну хз, я не замечал, хотя скажу, что и не так много делал,
> чтоб заметить.
там локейты, а это сам должен понимать какая-скорость.
> 2)Ну теоретически разве что на больших объемах справочных
> таблиц. Но справочников больших объемов пока что не видел
> ни в одном проекте(в том числе и в чужом).
та какая разница сколько там записей(хотя тоже важно :))? Зачем мне держать 10 справочников открытыми, по которым все время идет локейт, только для того, чтобы вывести их значения? Я могу и запросом это получить. Да есть справочники простые, а есть взаимные ссылки, допустим контакт-контрагент. и в каждой таблице по 1 мл. записей.
← →
Kostafey © (2007-04-17 14:18) [39]А вот еще такая ситуация.
Я заранее не знаю какие именно поля будут отображены в пользовательком датасете.
(пользователь имеет возможность редактировать список отображаемых полей).
Необходимо настроить свойства DisplayLabel и DisplayWidth полей.
Редактировать в Гриде нельзя т.к. неизвестно сколько будет полей и какие.
Так вот корректно было бы получать в Наборе данных все поля,
создавать для каждого поля TField (в Наборе данных) и редактировать только
свойство Visible этих полей ?
← →
sniknik © (2007-04-17 14:21) [40]> Зачем мне держать 10 справочников открытыми, по которым все время идет локейт, только для того, чтобы вывести их значения?
ну например для того, чтобы не закачивать с сервера лишних данных, экономить трафик в условиях его ограниченности.
к примеру работаешь с таблицей на 100 тыс или более у которой одно/несколько поле длинное и часто повторяющееся (вынесены в справочник)... ну например 20 вариантов на все записи первой.
как думаешь, что выгоднее 1 раз скачать все 20 дополнительных записей, а в таблице оригинале только индекс-ссылка(число) на эти записи, или тянуть с сервера 100тыс записей * длинна записи из справочника при запросе объединении. ???
p.s. не надо легковушку в плуг запрягать вместо трактора и все будет в порядке. а уж если запрягаете, то воздерживайтесь от комментариев типа "Лукап-поля которые реализованы в Делфе - большая пакость.".
Страницы: 1 2 3 вся ветка
Форум: "Базы";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.043 c