On-line: tnsr2, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
Администратор




Пост N: 3148
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.04.14 16:22. Заголовок: Фильтр ASCAN по массиву строковых значений


Может быть это уже неактуально, но, помнится, был такой вопрос. Просто мне пришлось решить подобную задачу.
Надо установить фильтр - поиск по символьному массиву, вида:

{|| ASCAN(aValues, <cFieldName>) # 0}

Если делать фильтр как блок кода, то СУБД типа Ads/Leto не показывают своих преимуществ, и выполняют его медленно.
Вот функция, которая формирует символьную строку для выполнения такого фильтра:

Function ArrFillter(cFld, aValues)
Local cRet := '', cc
if len(aValues) == 1
cRet := FldCompare(cFld, aValues[1])
else
cRet := ''
for each cc in aValues
if ! Empty(cRet)
cRet += ','
endif
cRet += ChrValue(cc)
next
cRet := 'ASCAN({' + cRet + '},' + cFld + ')#0'
endif
Return cRet

Function FldCompare(cFld, cVal, lUpper)
Local cFilter
if lUpper # nil
cFilter := ChrValue(cVal) + '$Upper(' + cFld + ')'
else
cFilter := cFld + '=' + ChrValue(cVal)
endif
Return cFilter

Static Function ChrValue(cStr)
Local cRet
if At('"', cStr) == 0
cRet := '"' + cStr + '"'
elseif At("'", cStr) == 0
cRet := "'" + cStr + "'"
elseif At("[", cStr) == 0 .and. At("]", cStr) == 0
cRet := "[" + cStr + "]"
else
cRet := '"' + StrTran(cStr, '"', '"+Chr(34)+"') + '"'
endif
Return cRet


Спасибо: 1 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 663
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет