Форум: "Базы";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
ВнизКак сделать сортировку в DBGrid е Найти похожие ветки
← →
Andrushk (2003-02-06 15:02) [0]Надо сортировать по клику на заголовке столбца
Сейчас я это делаю так:
with (dbgView.DataSource.DataSet as TClientDataSet) do if Active then Close;
if Column.Field.FieldKind=fkData then
with (dbgView.DataSource.DataSet as TClientDataSet) do
begin
IndexDefs.Clear;
IndexDefs.Add("SortIndex",AnsiUpperCase(Column.FieldName),[]);
IndexName:="SortIndex";
end;
(dbgView.DataSource.DataSet as TClientDataSet).Open;
Проблема в том, что сортировать LookUp поля так нельзя, а их в основном и надо.
Может кто делал подобные вещи - поделитесь опытом, а то все что я не придумываю кажется мне не очень универсальным и громоздким.
← →
Reindeer Moss Eater (2003-02-06 15:08) [1]1. По клику на заголовке столбца проверять тип поля. И если оно LookUp, ничего не делать.
2. Сортировать по полю - ключу для lookup поля.
← →
Reindeer Moss Eater (2003-02-06 15:09) [2]Получать это поле не на клиенте, и сортировать в запросе
← →
Andrushk (2003-02-06 15:37) [3]>>Reindeer Moss Eater
я сейчас так и делаю, просто else из запроса выкинул когда его вставлял в вопрос, но это не выход, поле NAME таблички совсем необязательно завязано с ID, которым я могу воспользоваться
>>Reindeer Moss Eater
Я думал над этим, но мне надо написать универсальную форму, на которой лежит грид, а уж какие там будут данные, из какого датасета - это заранее неизвестно
можно конечно передавать форме кроме клиентдатасета еще и датасет и список полей соответствия lookup-полей и реальных в базе, а потом динамически подставлять в запрос ORDER BY по нужным полям
но может как-то проще можно?
← →
Reindeer Moss Eater (2003-02-06 15:38) [4]Что для тебя критерий "простоты"?
← →
Andrushk (2003-02-06 15:50) [5]мне бы не хотелось лезть в запрос
просто тупо добавлять ORDER BY в конец? а вдруг там какая-нить хрень стоит после которой нельзя ORDER BY ставить,
да и вообще, еслибы я мог из clientdataset добраться до clientdataset"а - это еще одно, а так передавать их оба...
может есть еще какие-то пути
я не могу сказать что проще пока не узнаю еще какие-нибудь методы
← →
Соловьев (2003-02-06 15:59) [6]В обработчике onTitleClic:
ClientDataSet.IndexName := "NameField"
И все.
← →
Соловьев (2003-02-06 16:04) [7]Сорри. Вот так:
procedure TForm.GridTitleClick(Column: TColumn);
begin
ClientDataSet.IndexFieldNames := Column.FieldName;
end;
← →
Andrushk (2003-02-06 16:06) [8]>>Соловьев ©
для lookup полей это не сработает
← →
Соловьев (2003-02-06 16:10) [9]
> Andrushk (06.02.03 15:50)
> мне бы не хотелось лезть в запрос
>
> просто тупо добавлять ORDER BY в конец? а вдруг там какая-нить
> хрень стоит после которой нельзя ORDER BY ставить,
Дествитель делай связку на сервере.
нельзя ORDER BY ставить - ты зачем?
← →
Andrushk (2003-02-06 16:19) [10]>>Соловьев ©
что за связка на сервере?
и почему нельзя ORDER BY добавлять?
← →
Соловьев (2003-02-06 16:23) [11]Связка на сервере:
select t.*, lookUp.name
from t, lookUp
where t.id=lookUp.id
order by lookUp.name
> Andrushk (06.02.03 15:50)
> мне бы не хотелось лезть в запрос
>
> просто тупо добавлять ORDER BY в конец? а вдруг там какая-нить
> хрень стоит после которой нельзя ORDER BY ставить
Сам себе противоречишь. Можно ставить, только ты зачем - чтобы решать когда ставить. Имхо.
← →
Andrushk (2003-02-06 16:36) [12]>>Соловьев ©
Я себе не противоречу, просто фразу "нельзя ORDER BY ставить - ты зачем?" - лично я воспринял как предостережение, что в данном случае его лучше не использовать, поэтому и спросил "почему?"
я вот подумал, любому ли запросу можно в конец впендюрить ORDER BY... вроде любому
запрос на сервере, это в смысле в датасете?
кстати, можно писать вот так:
select t.*
from t, lookUp
where t.id=lookUp.id
order by lookUp.name
Если бы можно было написать: select t.*, lookUp.name - то нечего было бы измудряться с ORDER BY
может еще какие способы есть????
← →
Соловьев (2003-02-06 16:44) [13]
> Andrushk (06.02.03 16:36)
> запрос на сервере, это в смысле в датасете?
провайдер у тебя с чем связан?
> может еще какие способы есть????
Можно через ClientDataSet.CommandText...
← →
Andrushk (2003-02-06 16:52) [14]dataset->provider->clientdataset
Но насколько я понимаю, на клиенте нет никакого смысла делать запросы, ведь я буду выбирать данные не из всего набора данных, а лишь из тех, которыми располагает клиент
← →
Соловьев (2003-02-06 16:58) [15]
> Andrushk (06.02.03 16:52)
> dataset->provider->clientdataset
>
> Но насколько я понимаю, на клиенте нет никакого смысла делать
> запросы, ведь я буду выбирать данные не из всего набора
> данных, а лишь из тех, которыми располагает клиент
Тебе нужно внимательно прочитать про Мидас.
TQuery(TTable)->provider->clientdataset а не то что ты написал.
ClientDataSet.CommandText-шлет запрос провайдеру, тот определяет откуда надо взять и возвращает(удаляет, вставляет, обновляет) данные. Еще есть интересная вещь Delta и ApplyUpdate - обязательно про них читай.
← →
Andrushk (2003-02-06 17:03) [16]>>Соловьев ©
зачем мне TQuery, я работаю с oracle через DBExpress, и в качестве dataset"а использую TSQLDataSet
а вот по поводу запроса провайдеру - надо проверить, если это действительно так, то вроде задача упрощается
:-)) интересно, как не зная ApplyUpdate можно вообще работать с ClientDataSet"ом
← →
Соловьев (2003-02-06 17:11) [17]
> Andrushk (06.02.03 17:03)
> >>Соловьев ©
>
> зачем мне TQuery, я работаю с oracle через DBExpress, и
> в качестве dataset"а использую TSQLDataSet
Неважно.
← →
Andrushk (2003-02-06 17:26) [18]>>Соловьев ©
а как мне в clientdataset"е в SELECT-е, в клаузе FROM указать что я хочу выбирать из всего того, что есть в dataset-е?
т.е. можно ли сделать так, что dataset будет как табличка, и я его укажу в запросе clientdataset"а
← →
Andrushk (2003-02-06 17:32) [19]>>Соловьев ©
вообще бы как бы такой запрос написать, чтобы он включил все поля из датасета + все лукап поля
← →
Соловьев (2003-02-06 17:33) [20]Провайдер сам смотрит что ему нужно изменить.
OnGetDataSetPoperties - посмотри там можно указать кого ты хочешь менять.
← →
Соловьев (2003-02-06 17:36) [21]ftp://nps.vnet.ee/pub/Docs/Delphi/DX/MIDAS.zip
Есть ее перевод у меня, но ссылки я не нашел, очень хорошая статья.
← →
Andrushk (2003-02-06 17:45) [22]>>Соловьев ©
а где бы можно почитать про OnGetDataSetPoperties ??
Кстати, я тоже скорпион :-)
нет, вот как мне сделать:
есть SQLDataSet1 - в нем какой-то запрос, сложный с кучей условий
через провайдер он связан с ClientDataSet1
Так вот можно в ClientDataSet1.CommandText написать:
SELECT * FROM SQLDataSet1
- ну по смылу вот так, а как это реально можно написать?
← →
Andrushk (2003-02-06 17:47) [23]//Соловьев © (06.02.03 17:36)
// ftp://nps.vnet.ee/pub/Docs/Delphi/DX/MIDAS.zip
//Есть ее перевод у меня, но ссылки я не нашел, очень хорошая статья.
Может скинешь?
Andrushk@front.ru
← →
Соловьев (2003-02-06 17:47) [24]Нет, так нельзя.
← →
Соловьев (2003-02-06 17:51) [25]Я отправил.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c