|
Не корректно работает поиск с UPPER внутри
|
|||
---|---|---|---|
#18+
Добрый день. Прошу помочь с таким вопросом - при заполнении таблицы, например, заказов, поле заказчика заполняется с помощью 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 есть только один Слон, то его не обнаруживает. Подскажите, где я накосячил? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 19:56 |
|
Не корректно работает поиск с UPPER внутри
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Хотя лично я вместо такого синтаксиса Код: sql 1.
использую Код: sql 1.
но перед этим индексирую: INDEX on upper(ccustname) TAG upperccustname и манипулирую с Код: sql 1.
Потому как в первом случае даже на небольших таблицах (несколько десятков тысяч записей) мы получаем жуткий тормоз, а во втором - оптимизированное выражение - работает очень быстро ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2015, 09:58 |
|
Не корректно работает поиск с UPPER внутри
|
|||
---|---|---|---|
#18+
Хотя нет, Код: sql 1.
на Код: sql 1.
не действует. Можно = или == ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2015, 14:49 |
|
Не корректно работает поиск с UPPER внутри
|
|||
---|---|---|---|
#18+
Pulsar_p, Спасибо за отклик. Имхо, Like требует все-таки немного другой конструкции запроса, тогда действительно нужно индексировать, и применять SCAN , наверное. Но я как-то не вижу очевидных преимуществ от такой переделки и чем like в данном случае лучше, чем $. Возможно, мне придется попробовать двигаться в том направлении. Однако чем плох оператор $ ? Он ведь совершает поиск, часть значений в результате появляется, т.е. поиск-то идет, только работает как-то коряво. Например, если есть только одна запись "слон" , а все другие не имеют таких букв в названии, то по поискам "с", или "сл" и т.д. в том числе "слон" - нет ничего. Вернее, я ничего не вижу, может указатель и встал на запись, а listbox не отобразил. точно также, если есть несколько похожих записей, например, "слон", "слоник", "слонище", то по поиску "сло" покажет всех трех, а вот поиск "слоник" - не даст ничего. В общем, в самом запросе вроде нет ничего криминального, возможно я как-то с listbox не разобрался, а для устойчивой работы надо понимать - в чем конкретно косяк. Может еще какие идеи будут, куда покопать, а то глаз намылил, смотрю в код и вижу фигу, да и что можно увидеть , не имея ни опыта, ни подготовки даже. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2015, 19:35 |
|
Не корректно работает поиск с UPPER внутри
|
|||
---|---|---|---|
#18+
Тут такое дело, господа, я приношу всем извинения. В какой-то степени можно пытаться оправдываться полным отсутствием опыта, но конечно , это не так, что бы уж сильное оправдание. Все работает, поиск правильный, единственной причиной этого топика служит моя невнимательность и сильно-хитромудрость - дело в том, что я предусмотрел, что когда listbox теряет фокус и становится невидимым, то он смещается на top=120 в пустое пространство формы, а когда становится видимым - занимает положение top=51, в коде я случайно ставлю top=30, а может на начальном этапе проектирования формы так и было, да я забыл, в общем, из-за этого первый результат запроса просто тупо резало из-за неверно заданного положения на форме, а поскольку все в разработке, то таблица имеет всего несколько записей для тестирования, отсюда заблуждение о том, что некорректно работает upper или не видит полное совпадение. Я понимаю, какого определения достоин, я приношу извинения, я прошу принять во внимание отсутствие опыта и смиренно прошу в будущем мои вопросы и посты не игнорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2015, 20:24 |
|
|
start [/forum/topic.php?fid=41&fpage=23&tid=1582313]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 175ms |
0 / 0 |