powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
31 сообщений из 31, показаны все 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
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307895
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я только что вместо всего WHERE поставил
Код: plaintext
1.
2.
WHERE (((PHYSICAL_PERSON.SURNAME) Like  "*" ) AND 
((PHYSICAL_PERSON.PNAME) Like  "*" )
 AND ((PHYSICAL_PERSON.PATRONYMIC) Like  "*" ));

И получил тоже самое
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32307898
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет звездочки я предложил другой вариант в 17:12
По-моему звездочка не подходит тут...
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32308103
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Всеволод, 17:12 - это значит мой пост от 17:12. Его надо прочитать. Там звездочка не подставляется в селект.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32308149
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то вы две страницы обсуждаете уже, а я не могу понять, зачем это надо. Поэтому попробую привнести новую струю. :)

> Есть мэйн форма с полем для ввода ФИО.
Задача: когда юзер начинает вводить фамилию, под контролом открывается форма, в которой по мере ввода сортируются имеющиеся в базе фамилии, после того, как юзер вводит пробел (чтобы начать вводить имя), сортировка в форме должна начаться по введенной фамилии и по вводимому имени.
Как реализовать такую сортировку???


Вот мои вопросы:

1. А так ли оно надо, чтобы изобретать различные извраты?

2. А почему бы, вместо того, чтобы делить строку на субстроки (тем паче, что их совсем не обязательно будет 3 - фамилия_имя_отчество, м.б. и 2, и 4, и т.д.), не объединить фамилию, имя и отчество в одно поле в запросе
... Family & (" " + FirstName) & (" " + ParentName) As FIO ...
?

3. А почему бы не использовать вместо формы поле со списком?

Варианты ответов:
1. Да.
А смысл тянуть за каждым нажатием клавиши ( ...по мере ввода сортируются... ) паравоз вычислений? Вдруг эту форму придется запускать на не очень новом компьютере? "Бойся данайцев"? Exit

1. Нет.
Goto 2

2. Нет.
Почему? Exit

2. Да.
Тогда все становится намного проще. А пользователи через два дня работы привыкнут, что, например, между фамилией и именем надо ставить один, а не пятнадцать пробелов. Можно легко делать как в текстовом поле, так и goto 3, за минусом функции разбиения строки на лексемы.

3. Нет.
Ок. Exit.

3. Да.
Поле со списком, имхо, как раз и предназначено (и как правило неплохо справляется со своим предназначением) для облегчения ввода. Если очень хочется наглядности, при получении фокуса полем можно делать какой-нибудь sendkeys("Alt-Down"), чтобы список сразу открывался, и юзер видел ближайшие подходящие записи. А позиционировать запись в подформе можно после нажатия Enter - работать будет намного быстрее.

Вот.
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32308166
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому попробую привнести новую струю
Привносишь новую струю в решенную проблему :)
Вопрос 1:
Смысл ЕСТЬ причем глубокий! На медленном компьютере протоестированно - все ОК.
Вопрос 2:
Хочу ответить Да, но не совсем понимаю, как это будет работать.
Family & (" " + FirstName) & (" " + ParentName) As FIO, т.е. в запросе (рекордсурс листбокса), ясное дело, будет ФИО в одном поле - это мне жить не мешает, но как будет происходить сортировка в этом списке по мере ввода ФИО, т.е. сначала по фамилии потом по имени, а затем по отчеству

По поводу моего "Привносишь новую струю в решенную проблему :)"
см. мой пост 16:38

2Владимир Саныч
Что-то я туплю :)
Лучше завтра попробую разобраться :)
...
Рейтинг: 0 / 0
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
    #32308169
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но как будет происходить сортировка в этом списке по мере ввода ФИО, т.е. сначала по фамилии потом по имени, а затем по отчеству
Как и обычная сортировка (только по мере ввода будет происходить не сортировка, а установка текущей записи, насколько я понимаю):

Иванов Иван Иванович
Иванов Иван Петрович
Иванов Иван Сидорович
Иванов Павел Иванович
Иванова Алла Андреевна
....

см. мой пост 16:38
Недоглядел.

причем глубокий
Ну, глубокий, так глубокий.

---
Только я одного не пойму, зачем пробелы-то лишние выдергивать? Это равносильно тому, что пытаться удалять дубликаты букв, например "Иииванов Иван...", если "Ииивановых" нет, а есть только "Ивановы". Нет подходящих записей - пользователь сам поправится.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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