powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
25 сообщений из 31, страница 1 из 2
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306778
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю возможно ли вообще такое :)
Есть мэйн форма с полем для ввода ФИО.
Задача: когда юзер начинает вводить фамилию, под контролом открывается форма, в которой по мере ввода сортируются имеющиеся в базе фамилии, после того, как юзер вводит пробел (чтобы начать вводить имя), сортировка в форме должна начаться по введенной фамилии и по вводимому имени.
Как реализовать такую сортировку???
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306780
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточнение :)
Проблема в том как после ввода пробела поменять параметры сортировки
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306781
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> по мере ввода сортируются имеющиеся в базе фамилии

Сортируются или отсеиваются?
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306783
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсеиваются, но с фамилиями это уже достигнуто :)
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306785
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: plaintext
1.
2.
3.
4.
where iif(
    instr([param], " " )> 0 ,
    field1 = left([param],instr([param], " " )- 1 ) and field2 like mid([param],instr([param], " " )+ 1 ) &  "*" ,
    field1 like [param] &  "*" 
)
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306788
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо идею вижу :)
А отчество тоже так?
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306791
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
С отчеством сложнее, потому что надо ловить второй пробел. Так что лучше написать 3 функции и пользоваться ими.

Код: plaintext
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.
37.
38.
39.
40.
where field1 like Fun1([param]) and field2 like Fun2([param]) and field3 like Fun3([param])

function Fun1(s as string) as string
dim i as integer
i=instr(s, " " )
if i> 0  then
    Fun1=left(s,i- 1 )
else
    Fun1=s &  "*" 
end if
end function

function Fun2(s as string) as string
dim i as integer,j as integer
i=instr(s, " " )
if i> 0  then
    j=instr(i+ 1 ,s, " " )
    if j> 0  then
        Fun2=mid(s,i+ 1 ,j-i- 1 )
    else
        Fun2=mid(s,i+ 1 ) &  "*" 
    end if
else
    Fun2= "*" 
end if
end function

function Fun3(s as string) as string
dim i as integer,j as integer
i=instr(s, " " )
if i> 0  then
    j=instr(i+ 1 ,s, " " )
    if j> 0  then
        Fun3=mid(s,j+ 1 ) &  "*" 
    else
        Fun3= "*" 
    end if
else
    Fun3= "*" 
end if
end function
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306792
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Саныч, ща разбираться буду :)
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306815
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, у меня нет слов!
Я не ожидал такого простого решения
Разобрался - все работает
Спасибо еще раз :)
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32306828
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть в этом деле одна неприятная штука. Для того чтобы происходил посимвольный отбор необходимо после ввода нового символа делать Recalc формы, а это получается крайне медленно. Можно ли как-то обойти это?
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307403
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я бы писал не Recalc, а Requery. Правда, на скорость это влиять не должно. Если работает медленно - надо искать почему.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307606
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо Recalc формы я сделал Requery листбокса и все стало нармально работать
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307796
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПРОДОЛЖЕНИЕ :)
Теперь мне нужно сделать форму поиска. На форме: 6 полей с данными (ленточная форма) и, соответственно, 6 поле для ввола критериев поиска в соответствующих полях. 6-е поле - ФИО, которое имеет своим значением сочетание полей Фамилия, Имя и Отчество.
Задача в принципе похожа: в поле поиска ФИО юзер последовательно вводит ФИО и происходит синхронный отбор.
Проблема : предложенные выше функции я использовал в рекордсурсе формы. Но дело в то, что эти функции работают только со свойством .Text, запрос при загрузке формы не выполняется и возникает ошибка "Слишком сложное выражение и т.д. и т.п.".
И что мне с этим делать?
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307821
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Насчет Text отвечаю сразу - его надо заменить на Value.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307841
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С Value работает лучше (если ввсети в поле ФИО любой символ, а потом стереть его, то возникает таже ошибка, т.е. работает только, когда Null или введен любой символ), но выбираются только те записи, где есть и фамилия и имя и отчество
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307846
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> но выбираются только те записи, где есть и фамилия и имя и отчество

Потому что я написал Like "*". Наверно, в запросе надо добавить or ... is null.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307854
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
iif(FunN([param])="*",true,fieldN like FunN([param])

Во как. Даже is null проверять не надо.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307861
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> если ввсети в поле ФИО любой символ, а потом стереть его, то возникает таже ошибка

Интересно посмотреть, что происходит внутри функций.

Может быть, надо описать в них параметр как Variant и добавить в самом начале каждой:

if isnull(s)then
Fun...="*"
exit function
endif
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307862
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так тоже пробывал - тогда в любом случае отображаются все записи.
Вот запрос (для наглядности):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT [Orders].[Реф №], [Orders].[Дата начала], [Orders].[Статус], 
[Orders].[Потребитель], [Orders].[Наименование], [PHYSICAL_PERSON].[SURNAME], [PHYSICAL_PERSON].[PNAME], [PHYSICAL_PERSON].[PATRONYMIC]
FROM Orders LEFT JOIN PHYSICAL_PERSON ON [Orders].[ID_PERS]=[PHYSICAL_PERSON].[ID_PERS]
WHERE 
'====
((([PHYSICAL_PERSON].[SURNAME]) Like Fun1([Forms]![оператор_список заказов]![FIO].[value]) or [PHYSICAL_PERSON].[SURNAME] is null) 
And (([PHYSICAL_PERSON].[PNAME]) Like Fun2([Forms]![оператор_список заказов]![FIO].[value]) or [PHYSICAL_PERSON].[PNAME] is null) 
And (([PHYSICAL_PERSON].[PATRONYMIC]) Like Fun3([Forms]![оператор_список заказов]![FIO].[value]) or [PHYSICAL_PERSON].[PATRONYMIC] is null)) 
'====
And ([Orders].[Реф №] Like [Forms]![ОПЕРАТОР_Список заказов]![ref] Or [Forms]![ОПЕРАТОР_Список заказов]![ref] Is Null) 
And ([Orders].[Дата начала] Like [Forms]![ОПЕРАТОР_Список заказов]![date1] Or [Forms]![ОПЕРАТОР_Список заказов]![date1] Is Null) 
And ([Orders].[Статус] Like [Forms]![ОПЕРАТОР_Список заказов]![status] Or [Forms]![ОПЕРАТОР_Список заказов]![status] Is Null) 
And ([Orders].[Потребитель] Like [Forms]![ОПЕРАТОР_Список заказов]![potr] Or [Forms]![ОПЕРАТОР_Список заказов]![potr] Is Null) 
And ([Orders].[Наименование] Like [Forms]![ОПЕРАТОР_Список заказов]![name] Or [Forms]![ОПЕРАТОР_Список заказов]![name] Is Null)
And ([Orders].[Дата начала]>=[Forms]![ОПЕРАТОР_Список заказов]![dATES] Or [Forms]![ОПЕРАТОР_Список заказов]![DATES] Is Null);
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307866
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так тоже пробывал относится к варианту с Is null :)
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307868
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Да, насчет is null я погорячился.

И попробуй все-таки не пробывАть, а прОбовать.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307884
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть, надо описать в них параметр как Variant и добавить в самом начале каждой: ....
В любом случае выдается список всех ФИО, где ФИО полностью введены
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307889
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ну так проверь, что возвращает каждая функция.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307891
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как выясняется звездочка она же "*" возвращает только непустые значения!!!
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307893
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Насчет звездочки я предложил другой вариант в 17:12.
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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