powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / прошу помочь с поиском
25 сообщений из 25, страница 1 из 1
прошу помочь с поиском
    #36525943
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поиск много раз обсуждался на форуме, но так и не нашел случая как у меня. Мне надо реализовать на форме поиск по всем столбцам. Сделал кнопку ПОИСК и текстовое поле для ввода слова для поиска. Я смог сделать только поиск по одному столбцу Фамилия с помощью фильтрации SET FILTER. Код у кнопки ПОИСК:

select table1
set filter to alltrim(thisform.text1.value)$alltrim(table1.family)
thisform.refresh

Как сделать, чтобы он мог фильтровать и по остальным столбцам, а не только по фамилии? Заранее спасибо!
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36525973
самое простое решение, «в лоб»:

1. положить на форму эдитбоксы edtFam, edtIm, edtOt (или какие вам ещё нужны будут);

2.
Код: plaintext
1.
2.
3.
4.
5.
select table1
set filter to ;
alltrim(thisform.edtFam.value)$alltrim(table1.fam) or ;
alltrim(thisform.edtIm.value)$alltrim(table1.im) or ;
alltrim(thisform.edtOt.value)$alltrim(table1.ot)
thisform.refresh
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36525974
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araks.comСделал кнопку ПОИСК и текстовое поле для ввода слова для поиска.
Ну так чего тебе еще надо?

1) Если нужен поиск а не фильтрация, то смотри в сторону команды LOCATE FOR
2) Условии поиска/фильтрации ставишь or и сравниваешь с каждым полем. Не забываешь про приведение типов - TRANSFORM тебе в помощь.
3) Если список полей заранее неизвестен, сформировать список полей можно через AFIELDS.
В этом случае формируешь строковую переменную lcStr условия поиска/фильтрации и делаешь макроподстановку что-то вроде
Код: plaintext
1.
2.
3.
locate for &lcStr
*или
set filter to &lcStr

P.S. Все непонятный слова можно посмотреть в хэлпе
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36526040
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребята, огромное спасибо вам! Все получается))
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36574137
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если сделать фильтрацию по нескольким полям? Допустим, найти всех Ивановых с отчеством Петрович. Я добавил еще пару тексбоксов, на кнопке Поиск прописал код, но что-то видимо не то. Помогите, кто знает.

select table1
GO top
set filter TO ;
alltrim(thisform.text1.value)$alltrim(table1.family);
alltrim(thisform.text2.value)$alltrim(table1.imya);
alltrim(thisform.text3.value)$alltrim(table1.otch);
thisform.refresh
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36574470
Ffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
araks.com
select table1
GO top
set filter TO ;
alltrim(thisform.text1.value)$alltrim(table1.family);
alltrim(thisform.text2.value)$alltrim(table1.imya);
alltrim(thisform.text3.value)$alltrim(table1.otch);
thisform.refresh

Несколько условий соединяются союзом and.
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36574757
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ffffffffffffffffaraks.com
select table1
GO top
set filter TO ;
alltrim(thisform.text1.value)$alltrim(table1.family);
alltrim(thisform.text2.value)$alltrim(table1.imya);
alltrim(thisform.text3.value)$alltrim(table1.otch);
thisform.refresh

Несколько условий соединяются союзом and.

ну это понятно, но такой вариант не работает, поэтому и прошу о помощи

select table1
GO top
set filter TO ;
alltrim(thisform.text1.value)$alltrim(table1.family) and;
alltrim(thisform.text2.value)$alltrim(table1.imya) and;
alltrim(thisform.text3.value)$alltrim(table1.otch)
thisform.refresh
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36574843
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araks.com
ну это понятно, но такой вариант не работает, поэтому и прошу о помощи


Так и не понял, зачем вообще нужна фильтрация, если речь вроде идет о поиске.

Код: plaintext
1.
2.
LOCATE FOR alltrim(thisform.text1.value)$alltrim(table1.family) and;
alltrim(thisform.text2.value)$alltrim(table1.imya) and;
alltrim(thisform.text3.value)$alltrim(table1.otch)
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36574905
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
reware,
я просто неправильно выразился, хотел фильтрацию) чтобы отфильтровалось и в гриде остались только те, кто нужен, поэтому использую set filter TO
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36575342
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araks.comreware,
я просто неправильно выразился, хотел фильтрацию) чтобы отфильтровалось и в гриде остались только те, кто нужен, поэтому использую set filter TO
В таком случае, что именно не работает при фильтрации ? Условие фильтра такое же, что и при поиске.
Код: plaintext
1.
2.
3.
4.
set filter TO ; 
alltrim(thisform.text1.value)$alltrim(table1.family) .and. ;
alltrim(thisform.text2.value)$alltrim(table1.imya) .and. ;
alltrim(thisform.text3.value)$alltrim(table1.otch) IN table1
GO TOP IN table1

и больше ничего не надо, никаких SELECT table1, никаких Refresh().
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36575607
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
reware,
сделал, как вы посоветовали. Не фильтруется. Вообще ничего не происходит
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36577757
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите кто-нибудь ((
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36578405
GermanGM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[]$[Иванович]=.f.
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36578578
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araks.comпомогите кто-нибудь ((
Надо выложить сюда архивом форму с таблицами. Мало ли где там у Вас еще какие баги завелись.
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36578707
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rewarearaks.comreware,
я просто неправильно выразился, хотел фильтрацию) чтобы отфильтровалось и в гриде остались только те, кто нужен, поэтому использую set filter TO
В таком случае, что именно не работает при фильтрации ? Условие фильтра такое же, что и при поиске.
Код: plaintext
1.
2.
3.
4.
set filter TO ; 
alltrim(thisform.text1.value)$alltrim(table1.family) .and. ;
alltrim(thisform.text2.value)$alltrim(table1.imya) .and. ;
alltrim(thisform.text3.value)$alltrim(table1.otch) IN table1
GO TOP IN table1

и больше ничего не надо, никаких SELECT table1, никаких Refresh().

Несколько ошибок в этом примере:
1. оператор $ регистрозависимый поэтому надо перевести все в один регистр
2. '' $ 'что-то' дает .F. поэтому надо проверять на пустоту искомого значения

поэтому надо примерно так
Код: plaintext
1.
2.
3.
4.
5.
set filter TO ; 
  (empty(thisform.text1.value) or upper(alltrim(thisform.text1.value))$upper(alltrim(table1.family))) .and. ;
  (empty(thisform.text2.value) or upper(alltrim(thisform.text2.value))$upper(alltrim(table1.imya))) .and. ;
  (empty(thisform.text3.value) or upper(alltrim(thisform.text3.value))$upper(alltrim(table1.otch)));
  IN table1
GO TOP IN table1
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579379
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
попробовал. не получилось((

igorbik,
выкладываю форму и таблицу
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579406
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araks.com,
Код кнопки "Найти" выглядит, например, так:

************************
IF EMPTY(thisform.text4.Value) && пол всегда нужно указать. Кроме того, нужна "затравка" для фильтра

RETURN
ENDIF

f3 = 'upper(thisform.text4.Value) = ;
upper(alltrim(table1.pol))'

IF NOT empty(thisform.text1.value)
f3 = f3 + ' and upper(alltrim(thisform.text1.value)) ;
$ upper(alltrim(table1.family))'
ENDIF

IF NOT empty(thisform.text3.value)
f3 = f3 + ' and upper(alltrim(thisform.text3.value)) ;
$ upper(alltrim(table1.gorod))'
ENDIF

select table1
set filter TO &f3

GO TOP
thisform.Refresh
******************
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579414
Ffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй сам открыть свой архив и определить, чего там нет. Второй раз уже выкладываешь неизвестно что. До сих пор не научился.
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579426
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ffffffffffff,
вообще-то я первый раз выкладываю что-то. Признаюсь, неправильно залил
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579428
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igorbik,

спасибо, работает отлично! А без "затравки" не получится?))
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579436
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igorbik,

я тоже вставил этот код, все отлично работает. Просто если хочу найти какого-нибудь Петрова, то помимо "Петров" надо обязательно пол "м" тоже писать для поиска. А без пола никак не получится, чтоб только один допустим критерий поиска написать?
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579441
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araks.comigorbik,
спасибо, работает отлично! А без "затравки" не получится?))
Ну, наличие AND заставляет с чего-то начинать. Кроме того, я написал что побыстрее.

Если продолжить в том же духе, то можно написать так:
***********
f3 = ''

IF NOT empty(thisform.text4.value)
f3 = 'upper(thisform.text4.Value) = ;
upper(table1.pol)'

IF NOT empty(thisform.text1.value)
f3 = f3 + ' and upper(alltrim(thisform.text1.value)) ;
$ upper(table1.family)'
ENDIF

IF NOT empty(thisform.text3.value)
f3 = f3 + ' and upper(alltrim(thisform.text3.value)) ;
$ upper(table1.gorod)'
ENDIF

if at("AND" , upper(allt(f3)),1) = 1
f3 = substr(allt(f3),4)
endif

* Для полного счастья нужно проверить F3 на пустоту перед установкой фильтра, а также запомнить текущий фильтр, чтобы потом к нему вернуться.

*************
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579452
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igorbik,
спасибо! буду разбираться)
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36579901
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araks.com,

Более компактный вариант на ту же тему.
Работает даже без проверки фильтра на пустоту.

filter1 = ;
IIF(EMPTY(thisform.text4.Value), '', 'and upper(ALLTRIM(thisform.text4.Value)) $ upper(pol) ') ;
+ IIF(EMPTY(thisform.text1.Value), '', 'and upper(alltrim(thisform.text1.value)) $ upper(family) ') ;
+ IIF(EMPTY(thisform.text3.Value), '', 'and upper(alltrim(thisform.text3.value)) $ upper(gorod)')

filter1 = SUBSTR(filter1,5)

select table1
set filter TO &filter1

GO TOP

thisform.Refresh
...
Рейтинг: 0 / 0
прошу помочь с поиском
    #36580429
araks.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igorbik,

спасибо, но я сам доработал) переделал ваш предпоследний код немного, и теперь фильтрация идеальная) Еще раз огромное спасибо!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / прошу помочь с поиском
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]