Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];

Вниз

Как в DBGrid сделать сортировку по клику на названию колонки   Найти похожие ветки 

 
Gawk   (2003-10-10 12:10) [0]

Здравствуй уважаемый ALL
Подскажите как в DBGRid сделать сортировку по клику на названию колонки


 
Reindeer Moss Eater   (2003-10-10 12:15) [1]

Получить имя поля кликнутой колонки.
Перестроить текст запроса (ORDER BY) | Изменить имя активного индекса
Переоткрыть запрос.


 
Vlad   (2003-10-10 12:21) [2]

Комментарий к [1]
Получить имя не колонки, а поля, соотв. данной колонке, затем подставить его в ORDER BY
Т.е. "select * from table where .... order by " + Column.FieldName
Будет работать, если FieldName не является алиасом.


 
Reindeer Moss Eater   (2003-10-10 12:27) [3]

Комментарий к [2]

Было написано

Получить имя поля кликнутой колонки.


 
Reindeer Moss Eater   (2003-10-10 12:29) [4]

Будет работать, если FieldName не является алиасом.

Будет работать даже если имя поля является алиасом.
Не будет работать - если поле не физическое.


 
Arm79   (2003-10-10 15:28) [5]

Как вариант - использовать ClientDataSet, у которого индексы могут строится после открытия. Там указываешь в IndexFields поля и он сам их сортит.


 
Gawk   (2003-10-10 15:57) [6]

Ниже приведдённый код выдаёт ошибку на строке (o) не понимаю почему. Column.FieldName выдаёт имя поля правильно.

procedure TForm20.DBGrid1TitleClick(Column: TColumn);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("select CPU.inventar,VIDEO.place,MB.mol");
ADOQuery1.SQL.Add(" from MB,CPU,VIDEO ");
ADOQuery1.SQL.Add("where MB.ID=CPU.ID and VIDEO.ID=CPU.ID");
(о)ADOQuery1.SQL.Add("order by CPU."+Column.FieldName);
ADOQuery1.Open;
end;


 
Плохиш_   (2003-10-10 16:02) [7]

>Gawk © (10.10.03 15:57) [6]

т.е. так и пишешь:

order by CPU.mol

? ;-)


 
Reindeer Moss Eater   (2003-10-10 16:04) [8]

Какую ошибку?


 
dmtr   (2003-10-10 16:06) [9]


> Gawk © (10.10.03 15:57) [6]


ADOQuery1.SQL.Add(" order by CPU."+Column.FieldName);


 
Reindeer Moss Eater   (2003-10-10 16:07) [10]

order by CPU."+Column.FieldName

А если торкнули по колонке с полем не из таблицы CPU????


 
Gawk   (2003-10-10 16:14) [11]

Текст ошибки
Access violation at address .... in module ...
при клике на соответствующее таблице CPU поле


 
Reindeer Moss Eater   (2003-10-10 16:17) [12]

Эта ошибка никак не связано с кодом из [6].
Если конечно существует ADOQuery1


 
Reindeer Moss Eater   (2003-10-10 16:21) [13]

ADOQuery1.Close;

Если в DesignTime не были созданы экземпляры полей, то после этих строчек в гриде Colums уничтожаются


 
Arm79   (2003-10-10 16:27) [14]


> ADOQuery1.SQL.Add("where MB.ID=CPU.ID and VIDEO.ID=CPU.I D");
> (о)ADOQuery1.SQL.Add("order by CPU."+Column.FieldName);

А пробел?


 
Reindeer Moss Eater   (2003-10-10 16:29) [15]

Причем здесь пробел-то?


 
dmtr   (2003-10-10 16:32) [16]


> Arm79 © (10.10.03 16:27) [14]

Я тоже так думал, но при этом возникла бы SQL-ошибка, а не AV


 
Arm79   (2003-10-10 16:32) [17]

where MB.ID=CPU.ID and VIDEO.ID=CPU. IDorder by CPU.

Из текста получается так


 
dmtr   (2003-10-10 16:34) [18]


> Reindeer Moss Eater © (10.10.03 16:21) [13]

Да, но строка ошибки другая


 
Arm79   (2003-10-10 16:35) [19]

По-моему та самая.


 
Reindeer Moss Eater   (2003-10-10 16:37) [20]

До выполнения SQL дело не доходит вообще.

procedure TForm20.DBGrid1TitleClick( Column: TColumn);
begin
ADOQuery1.Close;
После этого Column указывает в космос, а не на экземпляр TColumn.

Это если нет статических TField. А их нет по всей видимости.

И Column.FieldName приводит к AV


 
dmtr   (2003-10-10 16:38) [21]


> Arm79 © (10.10.03 16:35) [19]

Поясни, ты отстаиваешь свое мнение или Reindeer Moss Eater © (10.10.03 16:21) [13]?


 
dmtr   (2003-10-10 16:39) [22]


> Reindeer Moss Eater © (10.10.03 16:37) [20]

Согласен.


 
Gawk_   (2003-10-10 16:40) [23]

Я знаю что с кодом [6] не связано там вроде всё правильно
Но когда убираю эту строчку всё работает


 
Arm79   (2003-10-10 16:40) [24]

Но тогда ошибка выдавалась бы не в 6 строке, а во второй. Тем более, что раз Query закрыт, то никакой работы с колумн не производится. Может быть, в гриде вручную выделены 3(?) столбца с конкретными именами полей, которые пропадают?


 
Reindeer Moss Eater   (2003-10-10 16:41) [25]

Но тогда ошибка выдавалась бы не в 6 строке, а во второй.

С какой радости?


 
sniknik   (2003-10-10 16:42) [26]

если используется ADO то зачем делать перезапрос? используй свойство Sort.


 
Reindeer Moss Eater   (2003-10-10 16:42) [27]

Gawk_ смотри [20]


 
Плохиш_   (2003-10-10 16:43) [28]

>Gawk_ (10.10.03 16:40) [23]
>Arm79 © (10.10.03 16:40) [24]

Моя твоя не понимайт? :-)

Reindeer Moss Eater © всё уже разжевал, осталось только проглотить


 
Arm79   (2003-10-10 16:44) [29]


> Но тогда ошибка выдавалась бы не в 6 строке, а во второй.
>
> С какой радости?

А с какой радости в 6?

А если попробовать в предыдущей order-у строке в конце поставить ";"


 
Reindeer Moss Eater   (2003-10-10 16:46) [30]

А с какой радости в 6?

С такой, что там попытка обращения к свойству уже убитого экземпляра колонки грида


 
dmtr   (2003-10-10 16:47) [31]


> Arm79 © (10.10.03 16:44) [29]

Смотри Reindeer Moss Eater © (10.10.03 16:37) [20]
Только в 6-й строчке происходит обращение к на тот момент уже несуществующему Column


 
Arm79   (2003-10-10 16:48) [32]

Точно. Не обратил внимание. Каюсь :(


 
Gawk   (2003-10-10 16:51) [33]

Reindeer Moss Eater © [20]
Действительно так
Попробомал через промежуточную переменную - работает
Спасибо.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.011 c
7-98910
DimaK
2003-08-06 13:26
2003.10.30
Перезагрузка


14-98801
Aristarh
2003-10-13 11:11
2003.10.30
Как изменить формат wav файла


3-98441
Denisiy
2003-10-10 16:38
2003.10.30
Установка курсора на последнюю строку таблицы (но не TTable.last)


3-98496
AndB
2003-10-09 12:40
2003.10.30
Если CommandText


1-98676
Eugene_29
2003-10-20 19:25
2003.10.30
Поле ввода фикс. размера с автомат. изменяющимся размером шрифта





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