Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сортировка в DBGrid при нажатии на заголовок колонки

1.9K
01 апреля 2004 года
elderb
61 / / 26.01.2004
Подобный прием используется довольно часто. Например в Винде (если в любом окне эксплорера сделать вид папки таблица, то при нажатии на заголовках "Имя" "размер".... осуществляется сортировка). Подобное делал с DBGrid. При событии OnTitleClick определяю колонку и обновляю SQL ORDER BY. Но получается слишком долго.(таблица 250 строк!) Можно ли сортировать данные прямо в DBGrid? Спасибо
358
01 апреля 2004 года
moonmike
423 / / 18.10.2002
EhLib Посмотри эту библиотечку. Весьма приятная там сеточка, да и для русских бесплатная.
2.0K
02 апреля 2004 года
laifik
37 / / 23.10.2003
Цитата:
Originally posted by moonmike
Grid в EhLib


//---------------------------------------------------------------------------
//Сортировка по столбцам
void __fastcall TForma1::DBGridEh1TitleClick(TColumnEh *Column)
{
if (Table1->Active)
{Table1->DisableControls(); //запретить отображение данных
try
{
Table1->Close(); //деактировать предыдущий запрос
Table1->SQL->Clear(); //очистить свойство SQL
//Оформить команду Select ... ORDER BY
String fldKon = Column->FieldName;
Table1->SQL->Add("Select * From ТблКонстр ORDER BY " + fldKon);
Table1->Open(); //Выполнить команду Select
}
__finally
{
Table1->EnableControls(); //разрешить отображение данных
}
}
}

ТблКонстр является источником данных для Table1.
При указании на столбец Grida меняется переменная
fldKon.

358
02 апреля 2004 года
moonmike
423 / / 18.10.2002
Понимаешь в чем дело, каждый раз гонять данные с сервера на клиента не есть гуд. Лучше уж сделать это через локальные индексы:
Цитата:

TIndexOptions Options;
Options << ixCaseInsensitive;
Table1->AddIndex("MostPaid", "CustNo;SaleDate;AmountPaid", Options, "SaleDate;AmountPaid");


А потом
Table1->IndexName = "MostPaid".

А вообще связка TClientDataSet + DBGridEh дает результат безо всякого когда.

2.0K
02 апреля 2004 года
laifik
37 / / 23.10.2003
Можно и так.
Предыдущий же метод я использую для Query, поэтому по запросу информация один раз считывается на комп, а дальше делай с данными что хочешь.
358
02 апреля 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by laifik
Можно и так.
Предыдущий же метод я использую для Query, поэтому по запросу информация один раз считывается на комп, а дальше делай с данными что хочешь.


Вот по этому поводу я бы на библии клясться не стал, все зависит от настроек BDE и/или тому подобных настроек.А вариант с локальными индексами обеспечивает именно клиентскую сортировку.

1.9K
05 апреля 2004 года
elderb
61 / / 26.01.2004
Цитата:
Originally posted by moonmike

Вот по этому поводу я бы на библии клясться не стал, все зависит от настроек BDE и/или тому подобных настроек.А вариант с локальными индексами обеспечивает именно клиентскую сортировку.

Индексы для Table как раз то, что нужно, но как быть с Query?

358
05 апреля 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by elderb
Индексы для Table как раз то, что нужно, но как быть с Query?


Дык, имхо, удобнее работать на связке TDataSet(TQuery, TStoredProc и иже с ними)<->TDataSetProvider<->TClientDataSet.
Тогда и данные у тебя в БД записываются когда тебе надо, а не тогда когда какой-нить BDE захотелось и проблем с локальными сортировками и прочими приблудами нет.

1.9K
07 апреля 2004 года
elderb
61 / / 26.01.2004
Цитата:
Originally posted by moonmike

Дык, имхо, удобнее работать на связке TDataSet(TQuery, TStoredProc и иже с ними)<->TDataSetProvider<->TClientDataSet.

А можно, если не трудно ссылочку или простенький пример просмотровщика БД?

358
07 апреля 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by elderb
А можно, если не трудно ссылочку или простенький пример просмотровщика БД?


А можно вопросик уточнить?На что конкретно ссылочку или чего конкретно пример.

1.9K
08 апреля 2004 года
elderb
61 / / 26.01.2004
Цитата:
Originally posted by moonmike

На что конкретно ссылочку или чего конкретно пример.


Пример использования этого способа доступа к БД (если не ошибаюсь это - midas?).
Пытался разобраться со стандартными примерами Борланда, но там получается, что для того что бы просмотреть базу (animals.dbf) нужен во-первых БДЕ, т.к. провайдер() обращается к Тable,во вторых сервер. Можно ли обойтись без БДЕ, если к примеру использовать DBASE? Если можете, посоветуте что почитать. Спасибо

358
09 апреля 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by elderb

Пример использования этого способа доступа к БД (если не ошибаюсь это - midas?).
Пытался разобраться со стандартными примерами Борланда, но там получается, что для того что бы просмотреть базу (animals.dbf) нужен во-первых БДЕ, т.к. провайдер() обращается к Тable,во вторых сервер. Можно ли обойтись без БДЕ, если к примеру использовать DBASE? Если можете, посоветуте что почитать. Спасибо


BDE, ADO, ODBC не важно в общем что, все равно понадобится, ну никуда тебе не деться без провайдера доступа к данным. А дальше никаких проблем.
Кидаешь на форму ADOConnection(к примеру) настраиваешь его на базу. Кидаешь ADOTable на коннекшн, кидаешь DataSetProvide - на тэйбл.ClientDataSet - на провайдера. DataSource - на клиентдатасет. DBGridEh на Датасурс. ВОт тебе и вся связочка.

358
09 апреля 2004 года
moonmike
423 / / 18.10.2002
В чем большой плюс данного подхода - в том что ты сам конролируешь момент внесения изменений данных в физическую БД. Попадают они туда или не попадают в зависимости от того когда тебе это хочется, а не когда менстра у кошки БГ.
1.9K
16 апреля 2004 года
elderb
61 / / 26.01.2004
Спасибо за помощь Moonmike, но возникла одна проблемка. Все сделал как ты посоветовал, но при запуске на компиляцию появляется сообщение Project Project.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type(Null) into type string' Process stoped и т.д. Попробовал активировать таблицу при создании формы, и деактивировать при уничтожении - результат тот же. Несмотря на это экзэшник создается нормально и работает безо всяких ошибок.
PS Еще вопросик чем отличается подключение описанное тобою от подключения в котором задействованы только ADOTable и DataSource (зачем такая длинная цепочка из Connection Table Provider?)
Спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог