Форум: "Базы";
Текущий архив: 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