Форум » Clipper » Динамический поиск в базе при вводе символов предполагаемого значения поля » Ответить

Динамический поиск в базе при вводе символов предполагаемого значения поля

Gray: Всем - "ЗдрасЬте"! Прошу дайте идею как реализовать в Clipper/Harbour следующую ситуацию: при вводе значения поля, тебе выскакивает подсказка из возможных вариантов. Ну примерно как в Google при задании строки поиска! Пример: поиск работника (его реквизиты, ну типа даты рождения, табельный/налоговый номер и т.д.), ввожу первые буквы имени/фамилии, а мне сразу похожих - список вываливается!, и, если среди них есть тот, который нужен, то достаточно просто передвинуться на "него". А далее ... . Может подобное кто-то реализовывал? Get, Inkey - не могу представить, как этим воспользоваться!

Ответов - 3

Andrey: Gray пишет: ввожу первые буквы имени/фамилии Нужно проиндексировать базу по Фамилии. Потом при показе базы делать ввод по буквам и показ найденного. Можно через INKEY(), но тогда нужно делать свой обработчик по вводу букв.

SergKis: Gray для dbEdit (Achoice) можно что то такое (с индексом на нужном поле): [pre2] STATIC cBuf := '', lBuf := .F. ... FUNCTION User_Func( nMode, nColPos ) // User function in dbEdit LOCAL RetVal := DE_CONT,nKey := LastKey(),nCol,nRow IF nMode == DE_IDLE // 0 cMode := "DE_IDLE" ... ELSEIF nMode == DE_HITTOP // 1 cMode := "DE_HITTOP" ... ELSEIF nMode == DE_HITBOTTOM // 2 cMode := "DE_HITBOTTOM" ... ELSEIF nMode == DE_EMPTY // 3 cMode := "DE_EMPTY" ... ELSEIF nMode == DE_EXCEPT // 4 cMode := "DE_EXCEPT" ... ELSE // 5 cMode := "OTHERWISE" IF nKey == K_F6 // вкл.\выкл. режим подвода lBuf := ! lBuf IF ! lBuf cBuf := '' ENDIF ELSEIF lBuf // в режиме подвода IF nKey == 8 .and. len(cBuf) > 0 // BACKSPACE cBuf := left(cBuf, len(cBuf) ELSEIF nKey >= 32 .and. nKey < 255 cBuf += chr(nKey) ENDIF IF len(cBuf) > 0 ordScope( 0, cBuf ) // или SET SCOPE TO cBuf, cBuf ordScope( 1, cBuf ) // ELSE ordScope( 0, NIL ) // SET SCOPE TO ordScope( 1, NIL ) // ENDIF dbGotop() // можно просто подвод, не Scope использовать ELSE // OTHERWISE ... ENDIF ENDIF ... RETURN RetVal [/pre2]

SergKis: вдогонку не забыть поставить в конце "режима подвода": nRetVal := DE_REFRESH я забыл.




полная версия страницы