![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать сортировку в DBGrid е [D7]
Andrushk © (2003-02-06 15:02:00)Надо сортировать по клику на заголовке столбца
Сейчас я это делаю так:
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 поля так нельзя, а их в основном и надо.
Может кто делал подобные вещи - поделитесь опытом, а то все что я не придумываю кажется мне не очень универсальным и громоздким.
Соловьев (2003-02-06 17:51:00) [1]Я отправил.
Соловьев (2003-02-06 17:47:00) [2]Нет, так нельзя.
Andrushk (2003-02-06 17:47:00) [3]//Соловьев © (06.02.03 17:36)
// ftp://nps.vnet.ee/pub/Docs/Delphi/DX/MIDAS.zip
//Есть ее перевод у меня, но ссылки я не нашел, очень хорошая статья.
Может скинешь?
Andrushk@front.ru
Andrushk (2003-02-06 17:45:00) [4]>>Соловьев ©
а где бы можно почитать про OnGetDataSetPoperties ??
Кстати, я тоже скорпион :-)
нет, вот как мне сделать:
есть SQLDataSet1 - в нем какой-то запрос, сложный с кучей условий
через провайдер он связан с ClientDataSet1
Так вот можно в ClientDataSet1.CommandText написать:
SELECT * FROM SQLDataSet1
- ну по смылу вот так, а как это реально можно написать?
Соловьев (2003-02-06 17:36:00) [5]ftp://nps.vnet.ee/pub/Docs/Delphi/DX/MIDAS.zip
Есть ее перевод у меня, но ссылки я не нашел, очень хорошая статья.
Соловьев (2003-02-06 17:33:00) [6]Провайдер сам смотрит что ему нужно изменить.
OnGetDataSetPoperties - посмотри там можно указать кого ты хочешь менять.
Andrushk (2003-02-06 17:32:00) [7]>>Соловьев ©
вообще бы как бы такой запрос написать, чтобы он включил все поля из датасета + все лукап поля
Andrushk (2003-02-06 17:26:00) [8]>>Соловьев ©
а как мне в clientdataset"е в SELECT-е, в клаузе FROM указать что я хочу выбирать из всего того, что есть в dataset-е?
т.е. можно ли сделать так, что dataset будет как табличка, и я его укажу в запросе clientdataset"а
Соловьев (2003-02-06 17:11:00) [9]
> Andrushk (06.02.03 17:03)
> >>Соловьев ©
>
> зачем мне TQuery, я работаю с oracle через DBExpress, и
> в качестве dataset"а использую TSQLDataSet
Неважно.
Andrushk (2003-02-06 17:03:00) [10]>>Соловьев ©
зачем мне TQuery, я работаю с oracle через DBExpress, и в качестве dataset"а использую TSQLDataSet
а вот по поводу запроса провайдеру - надо проверить, если это действительно так, то вроде задача упрощается
:-)) интересно, как не зная ApplyUpdate можно вообще работать с ClientDataSet"ом
Соловьев (2003-02-06 16:58:00) [11]
> Andrushk (06.02.03 16:52)
> dataset->provider->clientdataset
>
> Но насколько я понимаю, на клиенте нет никакого смысла делать
> запросы, ведь я буду выбирать данные не из всего набора
> данных, а лишь из тех, которыми располагает клиент
Тебе нужно внимательно прочитать про Мидас.
TQuery(TTable)->provider->clientdataset а не то что ты написал.
ClientDataSet.CommandText-шлет запрос провайдеру, тот определяет откуда надо взять и возвращает(удаляет, вставляет, обновляет) данные. Еще есть интересная вещь Delta и ApplyUpdate - обязательно про них читай.
Andrushk (2003-02-06 16:52:00) [12]dataset->provider->clientdataset
Но насколько я понимаю, на клиенте нет никакого смысла делать запросы, ведь я буду выбирать данные не из всего набора данных, а лишь из тех, которыми располагает клиент
Соловьев (2003-02-06 16:44:00) [13]
> Andrushk (06.02.03 16:36)
> запрос на сервере, это в смысле в датасете?
провайдер у тебя с чем связан?
> может еще какие способы есть????
Можно через ClientDataSet.CommandText...
Andrushk (2003-02-06 16:36:00) [14]>>Соловьев ©
Я себе не противоречу, просто фразу "нельзя 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:23:00) [15]Связка на сервере:
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:19:00) [16]>>Соловьев ©
что за связка на сервере?
и почему нельзя ORDER BY добавлять?
Соловьев (2003-02-06 16:10:00) [17]
> Andrushk (06.02.03 15:50)
> мне бы не хотелось лезть в запрос
>
> просто тупо добавлять ORDER BY в конец? а вдруг там какая-нить
> хрень стоит после которой нельзя ORDER BY ставить,
Дествитель делай связку на сервере.
нельзя ORDER BY ставить- ты зачем?
Andrushk (2003-02-06 16:06:00) [18]>>Соловьев ©
для lookup полей это не сработает
Соловьев (2003-02-06 16:04:00) [19]Сорри. Вот так:
procedure TForm.GridTitleClick(Column: TColumn);
begin
ClientDataSet.IndexFieldNames := Column.FieldName;
end;
Соловьев (2003-02-06 15:59:00) [20]В обработчике onTitleClic:
ClientDataSet.IndexName := "NameField"
И все.