| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Поиск записи |
| Автор: MacTep 9.2.2005, 14:17 | ||
Как организовать поиск в базе данных таким образом, чтобы пользовательно по нажатию любой клавиши видел, что активной стала та запись, в которой какое-либо поле начинается с той буквы, которую нажал пользователь? Я пишу так:
Работает только при первом нахождении записи. после второго нажатия на эту же клавишу активной остатся старая запись, а следующую запись с такой же первой буквой не становится активной. Как испрвить? Буду рад всем предложениям! |
| Автор: Alex 9.2.2005, 22:31 | ||
А если так:
|
| Автор: MacTep 10.2.2005, 10:22 |
| Alex, так как ты предложил работать тоже не будет, так как ключ поиска loPartialKey предполагает и добавление к нему loCaseInsensitive. Т.е. Дельфи сама приписывает это значение к ключу loPartialKey (прочитал об этом в книге). Так что вопрос по прежнему остается открытым! |
| Автор: z-END 10.2.2005, 10:44 |
| хочется - закрывай=) а вообще Locate ищет первую запись не от текущей, а с первой, по этому ничего не выйдет |
| Автор: Sharl 10.2.2005, 13:29 |
| Можно по другому подойти ,использовав все время обновляемую TTable.Filter |
| Автор: z-END 10.2.2005, 15:53 |
| Sharl ой незнаю... при нажатии на педаль каждый раз делать: 1. DisableControls//отключаем контролы 2. Filter ( причем я слабо себе представляю как ты опишешь это в фильтре) //выполняем поиск необходимой записи 3. x :=KeyFieldValue; //присваеваем х - данные ключевого поля, (без него вообще дохлый номер) 4. Filtered := False; //отключаем фильтр 5. Loacte (x); // находим по ключевому полю требуемую запись 6. EnableControls //включаем контролы если в БД куча записей ты представляешь сколько время на это уйдет, а если данные уже отображаются отфильтрованными, че тогда?! Наверно правильней при нажатии создавать SQL-запрос (вот тока в запросах несилен, незнаю мона так делать или нет), в который поместить все записи содержашие данную букву, при повторном нажатии перемещать указатель скула на сл.запись и передвигать его аналогично в основной БД. |
| Автор: Alex 10.2.2005, 17:21 |
| а я бы подглядел как это делает EhLib в своем поиске |
| Автор: Akella 10.2.2005, 17:41 | ||||
Я тоже отключаю такую возможность, в том случае если много записей, т.к. начинает тормозить. Добавлено @ 17:44 а так работает нормально
|
| Автор: Sharl 10.2.2005, 18:32 | ||||||
z-END Да. Наверно для решения этой задачи лучше использовать SQL запрос может быть примерно таким
А потом в проге делать
Еще один метод Можно использовать Query1(или Table1).Database.StartTransaction; перед переходом Table1.Delete; и снова Locate, В конце работы с поиском Query1.Database.Rollback; Но наверно метод второй более дикий по отношению к user-у? |
| Автор: MacTep 11.2.2005, 01:43 |
| Спасибо всем за советы, попробую что-нибудь придумать. Посмотрим, что из этого получится... |
| Автор: Akella 11.2.2005, 11:06 | ||
| Нуно использовать принцип пробежки по все полям с использованием фанкции POS Процедура поиска по всем полям
|
| Автор: Sharl 11.2.2005, 13:51 | ||
Bce отлично , но проблематично
скажем для Access-a надо ручками пересчитать и каждый раз сканировать с первой записи или поставить TBookmark- и |