![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в гриде [D7, XP]
Armond © (2008-10-01 11:19:00)Делаю поиск в DBGrid вводя данные в Edit
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if length(Edit1.Text)<>0 then ADODataSet1.Locate('_Num', Edit1.text, [loPartialKey])
else ADODataSet1.First;
DBGrid1CellClick(nil);
end;
Он находит значение, а как например мне сделать так чтобы курсор встал на следующую похожую запись, например при нажатии на кнопку ?
GrieVeR-13 (2008-10-01 17:40:00) [1]13131313sasasd
MsGuns (2008-10-01 17:16:00) [2]Есть несколько способов поиска следующей (предыдущей)
1) Просмотр всего НД до нахождения начиная со следующей (предыдущей) записи
2) Использовать "фоновые" запросы к серверу по условию и результат запоминать в списке ИД, далее при нажатии "кнопки" искать сначала в списке, а затем по ИД из списка в НД обычным локейтом
3) Испольовать "клон" датасета, который фильтровать и искать в "клоне" опять же перебором и при нахождении опять же локейтом по ИД в "основном" НД
4) Использовать методы датасета FindXXXX, но это только если колонка (поле) является индексом
Jeer (2008-10-01 13:51:00) [3]
> Теперь читаем [11] и думаем...
Вообще-то Armond попросил перевести [16] :)
oldman (2008-10-01 13:35:00) [4]
> Armond © (01.10.08 13:10) [16]
Теперь читаем [11] и думаем...
Armond (2008-10-01 13:10:00) [5]
> Что значит этот параметр?
loPartialKey Key values can include only part of the matching key field value; for example, 'HAM' would match both 'HAMM' and 'HAMMER.'
Ega23 (2008-10-01 13:06:00) [6]
> Может подскажешь ?
Может и подскажу.
Идешь в цЫкле по наименованиям, отбираешь те, длина которых больше равна длине того, что лежит в едите. Из низ берёшь столько символов, сколько лежит в едите. Сравниваешь их. Если истина - вот оно. Иначе - поехали дальше.
oldman (2008-10-01 13:02:00) [7]
> Armond © (01.10.08 12:59) [13]
> if length(Edit1.Text)<>0 then ADODataSet1.Locate('_Num',
> Edit1.text, [loPartialKey])
Что значит этот параметр?
Armond (2008-10-01 12:59:00) [8]
> Это же элементарно.
Может быть !!! Но я тока начинаю програмить !!! Может подскажешь ?
Ega23 (2008-10-01 12:33:00) [9]
> ну допустим перебором, но в ЕDit у нас лежит допустим только
> первые 2 буквы наименования, и как нам проверять на соответствие?
А что тут непонятного? Это же элементарно.
Или ты хочешь предложить подработать немножко?
Armond (2008-10-01 12:17:00) [10]
> А без разницы. Ты по-другому никак не сделаешь.
ну допустим перебором, но в ЕDit у нас лежит допустим только первые 2 буквы наименования, и как нам проверять на соответствие ?
Sergey13 (2008-10-01 12:17:00) [11]Или просто фильтровать на клиенте.
Ega23 (2008-10-01 12:16:00) [12]
> А если записей не так уж и мало ?
А без разницы. Ты по-другому никак не сделаешь.
Armond (2008-10-01 12:14:00) [13]
> Тупым перебором while not eof
А если записей не так уж и мало ?
Sergey13 (2008-10-01 12:05:00) [14]А SQL то на что? Ограничить выборку и всех делов. Правда придется немного переделать юзерский интерфейс для работы с этим.
oldman (2008-10-01 12:02:00) [15]
> Armond © (01.10.08 12:01) [5]
> Необходимо просто прыгать по тем записям, которые удовлетворяют
> тому, что введено в Edit
Тупым перебором while not eof
Armond (2008-10-01 12:01:00) [16]
> А зачем?
Необходимо просто прыгать по тем записям, которые удовлетворяют тому, что введено в Edit
oldman (2008-10-01 11:59:00) [17]
> Armond © (01.10.08 11:43) [3]
> Да, наверное, действительно начать поиск сначала
А зачем?
Armond (2008-10-01 11:43:00) [18]Да, наверное, действительно начать поиск сначала
AlekseyB (2008-10-01 11:41:00) [19]
> что должно происходить, если стоишь на последней записи?
Начать поиск с начала
Ega23 (2008-10-01 11:26:00) [20]Критерий похожести? что должно происходить, если стоишь на последней записи?
В целом - перебор