(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 

Конференция "Micro Focus/Borland"

Обсуждение вопросов, связанных с компанией Micro Focus/Borland, ее продуктами CaliberRM, CaliberRDM, SilkTest, StarTeam, TeamDefine, Together и других.

 
 
Добавить сообщение »

Тема: TClientDataSet : Динамическая сортировка на клиенте.

Автор:  Pnchl Дата: 29.03.2001 19:47
Если проблема в неверной сортировке записей на русском языке, то могу подсказать решение. Данные в ClientDDataset, я так понял, попадаяют из TTable или TQuery, при загрузке этих данных они приводятся к кодировке соответствующей настройкам драйвера в BDE. При сортировке в ClientDataset считается, что кодировка = кодировке записанной в региональных настройках Windows. (При сортировке сравнение строк производится API функцией CompareText, с региональными настройками LOCAL_SYSTEM_DEFAULT.) Если, например, данные в DataSet в DOS (cp866) кодировке, а в настройках BDE стоит ANSI драйвер, то данные в ClientDataSet попадут в DOS - кодировке, а сортировать он будет, считая, что они в ANSI - кодировке, т.е. неверно. Выход - поменять в установках драйвера в BDE LANGDRIVER на DBASE RUS сз8666 (cp866ru0 в IDAPI -шном вызове), после этого данные в ClientDataSet будут попадать в вправильной, ANSI-шной кодировке (Win1251) и все сортироваться будет правильно.

Если проблема проще и заключается в том, что вы не знаете как задавать имя Index у ClientDataSet, то привожу пример из работающей программы:

Обработчик событий OnDBGridTitleBtnClick:

procedure TMainForm.dbGridTitleBtnClick(Sender: TObject; ACol: Integer;
Field: TField);
begin
if ClientDataSet.IndexName<>'' then ClientDataSet.DeleteIndex(cdsMain.IndexName);
ClientDataSet.AddIndex('sort',
dbGrid.Columns[ACol].Title.Caption,
[ixCaseInsensitive],'','',0);
cdsMain.IndexName:='sort';
end;
Ответить на сообщение »
 
Автор:  Андрей Дата: 18.01.2001 19:57
Для сортировки данных в компоненте TClientDataSet можно использовать свойство IndexFieldNames (точно так же, как и в случае использования компонента TTable). Помимо этого, компонент TClientDataSet обладает методами AddIndex и DeleteIndex. Эти методы позволяют произвести сортировку данных на этапе выполнения.

На форму приложения, содержащую данные из компонента TClientDataSet, добавим компонент TListBox и создадим два обработчика события:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
ListBox1->Items=ClientDataSet1->FieldList;
}
//------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
AnsiString fn=ListBox1->Items->Strings[ListBox1->ItemIndex];
TIndexOptions opts;
opts << ixCaseInsensitive;
ClientDataSet1->AddIndex(fn + "Index", fn , opts, "", "",0);
ClientDataSet1->IndexName = fn + "Index";
Edit1->Text=fn;
}

Соответствующий код для Delphi имеет вид:

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items:=ClientDataSet1.FieldList;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var fn:string ;
begin
fn:= ListBox1.Items.Strings[ListBox1.ItemIndex];
ClientDataSet1.AddIndex(fn + 'Index', fn, [ixCaseInsensitive],'','',0);
ClientDataSet1.IndexName := fn + 'Index';
end;
Ответить на сообщение »
 
Автор:  Алексей Дата: 10.11.2000 04:46
ADO не подходит.
Ответить на сообщение »
 
Автор:  Денис Дата: 09.11.2000 15:43
Можно воспользоваться компонентами ADO, там есть свойство Sort, которое хорошо сортирует на клиенте
Ответить на сообщение »
 
Автор:  Алексей Дата: 09.11.2000 05:27
У нас возникла следующая проблема: Необходимо сортировать данные на клиенте (TClientDataSet). При нажатии на title DBGrid'а выполняем следующие действия:
{Нажали на title. Column - cекция на которую нажали}
begin
{В Датасет пишем значение поля по которому сортируем}
(Column.Field.DataSet as TClientDataset).IndexFieldNames:=Column.FieldName
end;
Сортирует криво - результат долго описывать слова, лучше попробуйте этот код.
Применяя такой метод сортировки к TTable получаем верный результат, а если сортируем TTable в RemoteDataModule на сервере, то на клиенте никакого результата вобще не получаем.
Подскажите выход из данной ситуации.
Заранее спасибо за ответы.
Ответить на сообщение »
 

Добавить сообщение »

 Распечатать »
 Правила публикации »
   
 Рекомендовать »  
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Антивирус ESET NOD32 SMALL Business Pack newsale for 10 user. Электронный ключ.
VMware Workstation Pro 12 for Linux and Windows, ESD
Nero Basic Burning ROM 2018 VL 5 - 9 License corporate
Advanced Data Export VCL Suite (with sources) + 1 Year Maintenance
ESET NOD32 Cyber Security Pro, лицензия на 1 год
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Мир OLAP и Business Intelligence: новости, статьи, обзоры
Один день системного администратора
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Как мигрировать программу написанную на старом Буилдер 4.52 (1)
Мы поддерживаем старое приложение написанное с использованием С++ Буилдер 5.5 (ЕХЕ) и Буилдер...
 
Создание базы данных в Delphi, без сторонних БД (1)
Уважаемый автор, гуглю уже который день и у Вас как у всех "кидаем.." "даже не создаем проект"...
 
C++ Builder6 & Excel (11)
Доброе время суток! Пишу приложение в C++ Builder6 для формирования файлов Excel. Требуется...
 
Принцип создания плагинов в Delphi (3)
Достали, Эта статья не о плагинах а о подключении dll и возможности использования ресурсов в...
 
QuickREport (40)
Есть приложение скомпилированное в Delphi6. Для построения отчетов я использовал компонеты из...
 
 
 



    
rambler's top100 Rambler's Top100