Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать сортировку в DBGrid е [D7]


Страницы:   1 2

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"
И все.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо