Форум — Ответы ( К темам )
? | Владимир: Поиск и сортировка в компоненте TDBGrid, обновление базы данных (15-01-2003 19:29:34) |
Подскажите пожайлуста, как в C++Builere 5, в компоненте TDBGrid сделать следующее: 1. Отсортировать список по вычисляемому полю — в итоге поле содержит, к примеру, фамилии. 2. Сделать быстрый поиск записи при наборе слова, т.е. установлен фокус на TDBGrid и пользователь набирает слово, а курсор переходит со строки на строку. И еще вопрос: как правильно обновлять данные в таблицах базы данных в BDE ? Т.е. при повторном запуске программы иногда не сохраняются добавленные/измененные записи в таблицах. Используются компоненты: TDatabase, TTable, TDataSource, TQuery. Желательно кусочек кода. Всем спасибо! | |
Владимир (15-01-2003 22:51:45) | |
1 Что касается сортировки a/ Воспользуйтесь компонентом TDBGridEh из библиотеки EhLib 2.6 скачать можно здесь: http://www.farpost.com/personal/dmitryb/RUS/ он позволяет просто делать сортировку по нажатию кнопки-заголовка в Grid-e б/ если отобранные данные поместить в таблицу в памяти, например компонент TRxMemoryData из библиотеки RXLib, то в нем есть метод сортировки, SortOnFields(AnsiString FieldName, bool CaseInsensitive, bool Desc) например по указанному столбцу в Grid (Метод сортирует данные в таблице в памяти в порядке возрастания или убывания (в зависимости от параметра Descending) значений полей, имена которых переданы в качестве параметра FieldNames. Для строковых полей сортировка может осуществляться с учетом или без учета регистра символов в зависимости от параметра CaseInsensitive. Если осуществляется сортировка по нескольким полям, то их имена разделяются точкой с запятой (;)) Пример: сортирует таблицу Мем по нажатию заголовка в Gride по выбранному полю без учета регистра в порядке возрастания //-------------------- void __fastcall TFMain::GridTitleClick(TColumn *Column) { Mem->SortOnFields(Column->FieldName,false,false); Mem->First(); } //--------------------------------------------------------------------------- или Mem->SortOnFields("ID;Name",false,false); — сортирует таблицу Мем по полям ID и Name без учета регистра в порядке возрастания 2 Быстрый поиск записи при наборе слова — для этого можно использовать компонент TRxLookupEdit из библиотеки RXLib (Компонента TRxLookupEdit представляет собой редактор с возможностью как прямого ввода текста пользователем в строке редактирования, так и выбора текста из выпадающего списка, заполняемого значениями из базы данных. При открытом списке или при значении свойства PopupOnlyLocate=False набор пользователем символов с клавиатуры приводит к позиционированию списка на ближайшую запись, совпадающую с введенным текстом ... ) // Можно конечно и в обычном Edit это делать самому, например так void __fastcall TForm1::Edit1Change(TObject *Sender) { TLocateOptions TLo; Ta->Locate("поле",Edit1->Text,TLo<<loPartialKey<<loCaseInsensitive); } 3. a/ если добавляете записи и переводите набор данных в состояние вставки методом Insert() или Append() или в состояние редактирования методом Edit(), фиксируйте изменение данных методом Post() б/ если изменения кэшируются, то есть у вас стоит Table->CachedUpdates = true; то делайте Database->StartTransaction(); Table->ApplyUpdate(); // попытаться записать сделанные изменения в базу Database->Commit(); // зафиксировать изменения в базе Table->CommitUpdates(); // освободить буфер чтобы зафиксировать изменения в базе в/ также есть метод Table->FlushBuffers(); производит запись изменений в таблицах Paradox на диск в базу, включая кэшируемые записи. (и установите LOCAL SHARE в TRUE в BDE) |