Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1182344492
Mishenka
2007-06-20 17:01
2007.07.15
Не удаляется компонент


3-1176397257
Kley
2007-04-12 21:00
2007.07.15
Статический и динамический запросы


2-1182092381
Knob
2007-06-17 18:59
2007.07.15
Смещение компонентов Canvas


2-1182175163
DevilDevil
2007-06-18 17:59
2007.07.15
Быстрое заполнение Excel-я. Как?


15-1181922518
Nic
2007-06-15 19:48
2007.07.15
Ваше отношение к философии





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский