Форум: "Начинающим";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];
ВнизПоиск в гриде Найти похожие ветки
← →
Armond © (2008-10-01 11:19) [0]Делаю поиск в 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;
Он находит значение, а как например мне сделать так чтобы курсор встал на следующую похожую запись, например при нажатии на кнопку ?
← →
Ega23 © (2008-10-01 11:26) [1]Критерий похожести? что должно происходить, если стоишь на последней записи?
В целом - перебор
← →
AlekseyB (2008-10-01 11:41) [2]
> что должно происходить, если стоишь на последней записи?
Начать поиск с начала
← →
Armond © (2008-10-01 11:43) [3]Да, наверное, действительно начать поиск сначала
← →
oldman © (2008-10-01 11:59) [4]
> Armond © (01.10.08 11:43) [3]
> Да, наверное, действительно начать поиск сначала
А зачем?
← →
Armond © (2008-10-01 12:01) [5]
> А зачем?
Необходимо просто прыгать по тем записям, которые удовлетворяют тому, что введено в Edit
← →
oldman © (2008-10-01 12:02) [6]
> Armond © (01.10.08 12:01) [5]
> Необходимо просто прыгать по тем записям, которые удовлетворяют
> тому, что введено в Edit
Тупым перебором while not eof
← →
Sergey13 © (2008-10-01 12:05) [7]А SQL то на что? Ограничить выборку и всех делов. Правда придется немного переделать юзерский интерфейс для работы с этим.
← →
Armond © (2008-10-01 12:14) [8]
> Тупым перебором while not eof
А если записей не так уж и мало ?
← →
Ega23 © (2008-10-01 12:16) [9]
> А если записей не так уж и мало ?
А без разницы. Ты по-другому никак не сделаешь.
← →
Sergey13 © (2008-10-01 12:17) [10]Или просто фильтровать на клиенте.
← →
Armond © (2008-10-01 12:17) [11]
> А без разницы. Ты по-другому никак не сделаешь.
ну допустим перебором, но в ЕDit у нас лежит допустим только первые 2 буквы наименования, и как нам проверять на соответствие ?
← →
Ega23 © (2008-10-01 12:33) [12]
> ну допустим перебором, но в ЕDit у нас лежит допустим только
> первые 2 буквы наименования, и как нам проверять на соответствие?
А что тут непонятного? Это же элементарно.
Или ты хочешь предложить подработать немножко?
← →
Armond © (2008-10-01 12:59) [13]
> Это же элементарно.
Может быть !!! Но я тока начинаю програмить !!! Может подскажешь ?
← →
oldman © (2008-10-01 13:02) [14]
> Armond © (01.10.08 12:59) [13]
> if length(Edit1.Text)<>0 then ADODataSet1.Locate("_Num",
> Edit1.text, [loPartialKey])
Что значит этот параметр?
← →
Ega23 © (2008-10-01 13:06) [15]
> Может подскажешь ?
Может и подскажу.
Идешь в цЫкле по наименованиям, отбираешь те, длина которых больше равна длине того, что лежит в едите. Из низ берёшь столько символов, сколько лежит в едите. Сравниваешь их. Если истина - вот оно. Иначе - поехали дальше.
← →
Armond © (2008-10-01 13:10) [16]
> Что значит этот параметр?
loPartialKey Key values can include only part of the matching key field value; for example, "HAM" would match both "HAMM" and "HAMMER."
← →
oldman © (2008-10-01 13:35) [17]
> Armond © (01.10.08 13:10) [16]
Теперь читаем [11] и думаем...
← →
Jeer © (2008-10-01 13:51) [18]
> Теперь читаем [11] и думаем...
Вообще-то Armond попросил перевести [16] :)
← →
MsGuns © (2008-10-01 17:16) [19]Есть несколько способов поиска следующей (предыдущей)
1) Просмотр всего НД до нахождения начиная со следующей (предыдущей) записи
2) Использовать "фоновые" запросы к серверу по условию и результат запоминать в списке ИД, далее при нажатии "кнопки" искать сначала в списке, а затем по ИД из списка в НД обычным локейтом
3) Испольовать "клон" датасета, который фильтровать и искать в "клоне" опять же перебором и при нахождении опять же локейтом по ИД в "основном" НД
4) Использовать методы датасета FindXXXX, но это только если колонка (поле) является индексом
← →
GrieVeR-13 © (2008-10-01 17:40) [20]13131313sasasd
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c