Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск в гриде [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]

Критерий похожести? что должно происходить, если стоишь на последней записи?

В целом - перебор


Наверх

Титульная страница Поиск, карта сайта Написать письмо