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

Сортируются или отсеиваются?
...
Рейтинг: 0 / 0
27.10.2003, 21:05
    #32306783
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Отсеиваются, но с фамилиями это уже достигнуто :)
...
Рейтинг: 0 / 0
27.10.2003, 21:07
    #32306785
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Код: 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
27.10.2003, 21:13
    #32306788
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Спасибо идею вижу :)
А отчество тоже так?
...
Рейтинг: 0 / 0
27.10.2003, 21:22
    #32306791
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
С отчеством сложнее, потому что надо ловить второй пробел. Так что лучше написать 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
27.10.2003, 21:23
    #32306792
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Спасибо, Саныч, ща разбираться буду :)
...
Рейтинг: 0 / 0
27.10.2003, 22:30
    #32306815
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Саныч, у меня нет слов!
Я не ожидал такого простого решения
Разобрался - все работает
Спасибо еще раз :)
...
Рейтинг: 0 / 0
28.10.2003, 00:01
    #32306828
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Есть в этом деле одна неприятная штука. Для того чтобы происходил посимвольный отбор необходимо после ввода нового символа делать Recalc формы, а это получается крайне медленно. Можно ли как-то обойти это?
...
Рейтинг: 0 / 0
28.10.2003, 13:41
    #32307403
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Я бы писал не Recalc, а Requery. Правда, на скорость это влиять не должно. Если работает медленно - надо искать почему.
...
Рейтинг: 0 / 0
28.10.2003, 15:07
    #32307606
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Вместо Recalc формы я сделал Requery листбокса и все стало нармально работать
...
Рейтинг: 0 / 0
28.10.2003, 16:38
    #32307796
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
ПРОДОЛЖЕНИЕ :)
Теперь мне нужно сделать форму поиска. На форме: 6 полей с данными (ленточная форма) и, соответственно, 6 поле для ввола критериев поиска в соответствующих полях. 6-е поле - ФИО, которое имеет своим значением сочетание полей Фамилия, Имя и Отчество.
Задача в принципе похожа: в поле поиска ФИО юзер последовательно вводит ФИО и происходит синхронный отбор.
Проблема : предложенные выше функции я использовал в рекордсурсе формы. Но дело в то, что эти функции работают только со свойством .Text, запрос при загрузке формы не выполняется и возникает ошибка "Слишком сложное выражение и т.д. и т.п.".
И что мне с этим делать?
...
Рейтинг: 0 / 0
28.10.2003, 16:55
    #32307821
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Насчет Text отвечаю сразу - его надо заменить на Value.
...
Рейтинг: 0 / 0
28.10.2003, 17:05
    #32307841
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
С Value работает лучше (если ввсети в поле ФИО любой символ, а потом стереть его, то возникает таже ошибка, т.е. работает только, когда Null или введен любой символ), но выбираются только те записи, где есть и фамилия и имя и отчество
...
Рейтинг: 0 / 0
28.10.2003, 17:10
    #32307846
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
> но выбираются только те записи, где есть и фамилия и имя и отчество

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

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

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

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

if isnull(s)then
Fun...="*"
exit function
endif
...
Рейтинг: 0 / 0
28.10.2003, 17:15
    #32307862
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Так тоже пробывал - тогда в любом случае отображаются все записи.
Вот запрос (для наглядности):
Код: 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
28.10.2003, 17:17
    #32307866
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Так тоже пробывал относится к варианту с Is null :)
...
Рейтинг: 0 / 0
28.10.2003, 17:18
    #32307868
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в подчиненной форме (как вычленить части из ФИО и фильтровать по 3 полям)
Да, насчет is null я погорячился.

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


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