|
форма поиска
|
|||
---|---|---|---|
#18+
В Visual FoxPro, я сделал Grid , которая содержит 20 слов. В 5 слов из 20 слов, два первых буквы, начинают "Ан". Я хочу сделать кнопку "поиск", что каждый раз, когда я написал две первые буквы (например, "An"), в Text box написал 5 слов (которых два первая буква, начинают "Ан") Что мне делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2014, 21:08 |
|
форма поиска
|
|||
---|---|---|---|
#18+
Никак не сделать. Тексбокс выводит одно поле таблицы или одно значение. Для вывода значений поиска удобно использовать грид. В тексбокс поиска в кипасс прописать запрос, который данные скидывает в курсор, который необходимо каждый раз отвязывать и подвязать к гриду. Но такой подход по моему мнению очень ресурсоемкий и не нужный. К примеру: я пользователь и хочу найти клиента "Аниськин" начинаю набирать "А" - комп показывает мне все фамилии на "А" потом "н" - комп отображает мне все фамилии начинающиеся на "Ан" затем я опечатывась и пропечатываю "м" - мне показывается пустой грид затем я стираю букввву "м" и мне опять показваются фамилии на "Ан". При этом подтормаживая при каждом поиске, который идет после каждой нажатой клавишы. Зачем оно нужно? Я и так знаю, что мне нужно, зачем мне нужны лишние тормоза при поиске и лишние запросы? По моему, лучше сделать отдельную кнопку поиск. В кипасс каждого тексбокса прописать, что если была нажата клавиша ентер, то отработать метод клик в кнопке поиск. Ну и не забывать сделать возможность в поиске с замещением символа и оговорить это с пользователем некими подсказками, инструкциями. Т.е. если я набираю "Синиц_н" то мне выводится фамилии "Синицын" и "Синицин". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 07:42 |
|
форма поиска
|
|||
---|---|---|---|
#18+
GoshaS,Здравствуйте! спасибо за информация Если я хочу,Как что вы сказали, делать что мне нода делать? какой код должен писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 13:18 |
|
форма поиска
|
|||
---|---|---|---|
#18+
Насколько вы знаете VFP? Сможете создать таблицу, заполнить ее данными, создать форму, на ней три текстбокса, кнопку и грид? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:31 |
|
форма поиска
|
|||
---|---|---|---|
#18+
GoshaS, Да, я знаю, все, что вы сказали,но кодирование плохо знаю ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 21:20 |
|
форма поиска
|
|||
---|---|---|---|
#18+
в стартовый файл, где все настройки добавим строку Код: sql 1.
Создим таблицу Код: sql 1.
создадим форму и нарисуем на ней грид с четырмся столбцами, внизу три текстбокса и одну кнопку, во всех textbox в событиях KeyPress добавить код: Код: sql 1. 2. 3. 4.
если нажата клавиша ентер, то выполнить код, прописанный в событии клик нашей кнопки и не выполнять действия по умолчанию для этой клавиши. Далее идем к нашей кнопке, в событии click прописываем наш код поиска: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
Данные в строку поиска вносим либо полностью, либо прописываем знаки замещения, "%" - любое количество любых символов "_" любой один символ. к примеру: если в поле поиска фамилии внести фамилию Шипиц_н со знаком замещения "_" то в результате поиска выйдут все Шипицын и Шипицин. если в поле поиска фамилии внести Шип% то результат будет Шип, Шипицин, Шипицын, Шипулин, Шиптяев и т.д. если в поле поиска внести Шип, то результат будет один - Шип. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 10:43 |
|
форма поиска
|
|||
---|---|---|---|
#18+
GoshaS Может лучше будет использовать ListBox? Из TextBox для SELECT...WHERE... можно взять условие без кнопки, массивов и TEXT...ENDTEXT. При малых таблицах и простым фильтром можно обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 02:25 |
|
форма поиска
|
|||
---|---|---|---|
#18+
sg12, Кнопка т.к. пользователю нужен выбор, либо поиск осуществлять клавишей ентер или мышкой, кому как удобней. Можно и без TEXT...ENDTEXT только когда запрос большой - для меня удобней смотреть в этой конструкции, ведь не обязательно он может состоять из одной таблицы. Удобно составлят запросы для отпрвки на sql сервер. В общем дело привычки. Что касается массива - то я нашел такое решение, использую как канву, чуть подправил и в другой ситуации применил. Есть конечно другие решения. Фильтр - ну может подтормаживать на таблицах под 10тысяч записей, все равно будет не проще моего способа организовать. Т.е. проверка какой фильтр установлен, создать новый или добавить к существующему и все это минимум по трем полям. Плюс индексы на таблицу для сортировки, ведь работаем с базой клиентов и пользователю будет понятней, когда ФИО идут по порядку. Листбокс - как минимум грид красивей оформлен, можно отдельно отметить цветом к примеру клиентов с просроченными паспортами, активную строку или выделить несколько строк одновременно и т.д. В прочем, вам никто не запрещает выложить свой вариант решения задачи. Он может оказаться для данной ситуации более подходящим. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 15:47 |
|
форма поиска
|
|||
---|---|---|---|
#18+
GoshaS ***Text1.Init SET ANSI OFF THIS.INTERACTIVECHANGE() THISFORM.List1.ROWSOURCETYPE = 2 THISFORM.List1.ROWSOURCE = 'cur_table1' ***Text1.InteractiveChange SELECT name1 FROM table1 WHERE name1 = ALLTRIM(THIS.VALUE) INTO CURSOR cur_table1 THISFORM.List1.REQUERY() ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 18:21 |
|
форма поиска
|
|||
---|---|---|---|
#18+
sg12, Для решения этой конкретной задачи ваш вариант конечно подойдет лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2014, 19:04 |
|
форма поиска
|
|||
---|---|---|---|
#18+
GoshaS, следующий строки что значит? lcCondition = 'where '+a_base(i, 2) и TEXT TO lcClient NOSHOW PRETEXT 15 SELECT tClient.f_name, tClient.i_name, tClient.o_name, tClient.date_rozh FROM tClient ORDER BY tClient.f_name, tClient.i_name, tClient.o_name <<m.lcCondition>> INTO CURSOR cClient ENDTEXT в этих линиях ,Происходит ошибка программы зачем,не знаю и другой вопрос можно использовать из фильтр?как? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2014, 19:12 |
|
форма поиска
|
|||
---|---|---|---|
#18+
fatimaaaa, Воспользуйтесь решением от sg12, его вариант лучше подходит под ваши условия задачи. Как я понял, вам для учёбы? по моему коду lcCondition - переменная, где сохраняется фильтр поиска. 1 действие - если нашли не пустое поле поиска, тогда создаем условие для запроса, которое всегда начинается с 'where' (см. SQL, к примеру select f_name from table1 where f_name='Петров'). Если есть еще одно поле, тогда к предыдущему условию добавить новое через 'AND' (select f_name from table1 where f_name='Петров' and i_name='Андрей') делаем, пока есть такие поля. TEXT TO lcClient NOSHOW PRETEXT 15 *** ENDTEXT Сохраняет строки, находящиеся между TEXT и ENDTEXT в переменную lcClient для работы этой конструкции надо установить настройку: SET TEXTMERGE ON ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 08:32 |
|
форма поиска
|
|||
---|---|---|---|
#18+
А так, чтобы понять, что не работает - надо дебагером глянуть, что за ошибка, проверить синтаксис, значение переменных, которые могут вызвать эту ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 10:32 |
|
форма поиска
|
|||
---|---|---|---|
#18+
fatimaaaaGoshaS, следующий строки что значит? lcCondition = 'where '+a_base(i, 2) и TEXT TO lcClient NOSHOW PRETEXT 15 SELECT tClient.f_name, tClient.i_name, tClient.o_name, tClient.date_rozh ; FROM tClient ; ORDER BY tClient.f_name, tClient.i_name, tClient.o_name ; <<m.lcCondition>> INTO CURSOR cClient ENDTEXT в этих линиях ,Происходит ошибка программы зачем,не знаю и другой вопрос можно использовать из фильтр?как? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 10:43 |
|
форма поиска
|
|||
---|---|---|---|
#18+
fatimaaaaGoshaS, следующий строки что значит? lcCondition = 'where '+a_base(i, 2) и TEXT TO lcClient NOSHOW PRETEXT 15 SELECT tClient.f_name, tClient.i_name, tClient.o_name, tClient.date_rozh ; FROM tClient ; ORDER BY tClient.f_name, tClient.i_name, tClient.o_name ; <<m.lcCondition>> INTO CURSOR cClient ENDTEXT в этих линиях ,Происходит ошибка программы зачем,не знаю и другой вопрос можно использовать из фильтр?как? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 10:57 |
|
форма поиска
|
|||
---|---|---|---|
#18+
IgorNG, В конструкции TEXT ENDTEXT не надо ставить ';' ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 12:28 |
|
форма поиска
|
|||
---|---|---|---|
#18+
Кому интересно покрутить: https://cloud.mail.ru/public/20f961650457/Forms.rar Сразу добавлена временная таблица по фамилиям - Петров, Иванов, Сидоров. Т.е. при запуске формы сразу можно их поискать. в поиск вводим с знаками замещения _ один символ % любое кол-во символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 14:33 |
|
форма поиска
|
|||
---|---|---|---|
#18+
Эту же конструкцию применяю и для работы с SQL сервером, только Код: sql 1. 2.
заменяю на Код: sql 1. 2. 3. 4. 5. 6. 7.
Это еще одна причина использования мной: TEXT ENDTEXT. Составил запрос утилиткой sql-сервера, скопировал в TEXT ENDTEXT и все гарантированно работает, остается добавить только условие. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 16:25 |
|
|
start [/forum/topic.php?fid=41&msg=38821275&tid=1582484]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 164ms |
0 / 0 |