powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не корректно работает поиск с UPPER внутри
5 сообщений из 5, страница 1 из 1
Не корректно работает поиск с UPPER внутри
    #39010255
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Прошу помочь с таким вопросом - при заполнении таблицы, например, заказов, поле заказчика заполняется с помощью listBox. Вводим в textbox TxtCustomer несколько символов, затем при наступлении lostFocus запускаем процедуру заполнения listbox.

После проверок на пустой-непустой TxtCustomer.Value выполняется такой код для поиска и подстановки:

lcStr = upper(alltrim(thisform.txtCustomer.value))

wait window 'Поиск...' nowait
select top 25 ;
alltrim(hcust.ccustname) + ' (' + ;
alltrim(hcust.ccity) + ') ' as cfirm, ;
icust_id as ifirm_id ;
from hcust ;
into cursor cfirm ;
where ;
lcStr $ upper(hcust.ccustname) ;
order by 1

if _tally > 0
select cfirm
thisform.lstFirm.Clear
scan
thisform.lstFirm.AddListItem(cFirm)
thisform.lstFirm.ItemData(thisform.lstFirm.ListCount)=ifirm_id
endscan
use in cfirm
wait clear
thisform.lstFirm.Visible = .T.
thisform.lstFirm.SetFocus
thisform.lstFirm.Refresh

else
wait window 'Нет данных'
endif


Столкнулся с тем, что названия из заглавных, например СЛОН ООО, в список не попадают, а, например, Слон ООО - попадают.
Кроме того, если есть точное совпадение, например, три названия, СЛОН ООО, Слон ООО и Слоник ООО, то при поиске "Слоник" - не выдаст ничего, так же не отображается, если название присутствует один раз. Если в таблице hcust есть только один Слон, то его не обнаруживает.

Подскажите, где я накосячил?
...
Рейтинг: 0 / 0
Не корректно работает поиск с UPPER внутри
    #39010675
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select top 25 ;
alltrim(hcust.ccustname) + ' (' + ;
alltrim(hcust.ccity) + ') ' as cfirm, ;
icust_id as ifirm_id ;
from hcust ;
into cursor cfirm ;
where ;
upper(hcust.ccustname) LIKE lcStr+'%';
order by 1



Хотя лично я вместо такого синтаксиса
Код: sql
1.
where upper(hcust.ccustname) LIKE lcStr+'%'


использую
Код: sql
1.
where  ccustname = lcStr


но перед этим индексирую:
INDEX on upper(ccustname) TAG upperccustname
и манипулирую с
Код: sql
1.
SET EXACT ...


Потому как в первом случае даже на небольших таблицах (несколько десятков тысяч записей) мы получаем жуткий тормоз, а во втором - оптимизированное выражение - работает очень быстро
...
Рейтинг: 0 / 0
Не корректно работает поиск с UPPER внутри
    #39010739
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет,
Код: sql
1.
SET EXACT ...

на
Код: sql
1.
SELECT ...

не действует.
Можно = или ==
...
Рейтинг: 0 / 0
Не корректно работает поиск с UPPER внутри
    #39010809
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pulsar_p,
Спасибо за отклик.

Имхо, Like требует все-таки немного другой конструкции запроса, тогда действительно нужно индексировать, и применять SCAN , наверное.
Но я как-то не вижу очевидных преимуществ от такой переделки и чем like в данном случае лучше, чем $.

Возможно, мне придется попробовать двигаться в том направлении.

Однако чем плох оператор $ ? Он ведь совершает поиск, часть значений в результате появляется, т.е. поиск-то идет, только работает как-то коряво. Например, если есть только одна запись "слон" , а все другие не имеют таких букв в названии, то по поискам "с", или "сл" и т.д. в том числе "слон" - нет ничего. Вернее, я ничего не вижу, может указатель и встал на запись, а listbox не отобразил.

точно также, если есть несколько похожих записей, например, "слон", "слоник", "слонище", то по поиску "сло" покажет всех трех, а вот поиск "слоник" - не даст ничего.

В общем, в самом запросе вроде нет ничего криминального, возможно я как-то с listbox не разобрался, а для устойчивой работы надо понимать - в чем конкретно косяк.

Может еще какие идеи будут, куда покопать, а то глаз намылил, смотрю в код и вижу фигу, да и что можно увидеть , не имея ни опыта, ни подготовки даже.
...
Рейтинг: 0 / 0
Не корректно работает поиск с UPPER внутри
    #39010825
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут такое дело, господа, я приношу всем извинения.

В какой-то степени можно пытаться оправдываться полным отсутствием опыта, но конечно , это не так, что бы уж сильное оправдание.

Все работает, поиск правильный, единственной причиной этого топика служит моя невнимательность и сильно-хитромудрость - дело в том, что я предусмотрел, что когда listbox теряет фокус и становится невидимым, то он смещается на top=120 в пустое пространство формы, а когда становится видимым - занимает положение top=51, в коде я случайно ставлю top=30, а может на начальном этапе проектирования формы так и было, да я забыл, в общем, из-за этого первый результат запроса просто тупо резало из-за неверно заданного положения на форме, а поскольку все в разработке, то таблица имеет всего несколько записей для тестирования, отсюда заблуждение о том, что некорректно работает upper или не видит полное совпадение.

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


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