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




Пост N: 758
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.07.07 09:20. Заголовок: [?] m6_evalpartial , aofResolvePartial


в SIX конструкция m6_evalpartial(nhand,{|| "25" $ cod}) работает
в ADS аналог якобы aofResolvePartial(nhand,{|| "25" $ cod}) не работает. В чем прикол ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 18 [только новые]


постоянный участник




Пост N: 105
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 20.07.07 12:12. Заголовок: Re:


видимо не заморачивались
функция явно избыточная и пишется за минуту
возможно также, что у тебя стоит фильтр не юзерский (локальный, с хэндлом), а серверный (без хэндла, т.е. ты подсовываешь функции число, которому не соответствует никакой фильтр или соответствует другой)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 760
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.07.07 12:17. Заголовок: Re:


Локальный фильтр стоит однако.
Видимо придется свою сделать ;)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 106
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 20.07.07 12:21. Заголовок: Re:


проверь в asc.exe
установи фильтр, проверь, что он с хэндлом (AltF, запомнить кол-во записей, посмотреть в инфо хэндл), далее Ctrl-Alt-?, aofResolvePartial...., Enter, снова Alt-F b и сравнить новое кол-во записей

Возможно также, что выражение всегда возвращает .T.

Ну и свою написать нетрудно, конечно
Кроме этого кто мешает установить фильтр сразу с той частью, которую ты даешь в evalapartial

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 761
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.07.07 12:27. Заголовок: Re:


suv2 пишет:

 цитата:
Кроме этого кто мешает установить фильтр сразу с той частью, которую ты даешь в evalapartial


Попробую , спасибо.
Не найду в гайде , как удалить запись из фильтра AOF , как добавить есть а удалить то как ?
Сначала AOF я заполнил через ряд aofAddRange и вот теперь мне нужно убрать записи которые не
удовлетворяеют условию.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 762
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.07.07 12:31. Заголовок: Re:


Dima пишет:

 цитата:
Не найду в гайде , как удалить запись из фильтра AOF , как добавить есть а удалить то как ?


Совсем слепой стал ;))))))))
aofRemoveRecord( <nHandle>, <nRecord> ) -> логическое значение

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 763
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.07.07 20:39. Заголовок: Re:


Не так все просто оказалось как я думал однако........
Вообщем грубо пока сделал так (работает)

Что бы отсеять записи которые есть в фильтре но не удовлетворяющие условию , путем их удлаления из
клиентского фильтра:

figa:=aofCountRecords(handl)
aofgotop(handl)
for i=1 to figa

// не думал что для сравнения придется чекать реальную запись
// скорее всего я не верно представлял себе как это работает
volvo->(dbgoto(aofGetRecord(handl)))

if &cblch==.f. // это условие переданное в символьном виде , не важно в обчем ;)
aofRemoveRecord(handl,aofGetRecord(handl))
endif
aofskip(handl)
next

Что скажешь Юра ? ;)

ЗЫ
Сверил по тому же условию локально под SIX , одинаковый результат ;)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 764
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.07.07 09:45. Заголовок: Re:


Идейка посетила ;)
В принципе все эти клиентские фильтра можно реализовать средствами Clipper и работать будет не
на много медленнее.
В кратце можно забрасывать валидные записи в отдельную базу на сервере , в которой будет одно
поле хранящее номер записи , а затем в браузере ходить по этим записям и тд итп

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 107
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 23.07.07 14:15. Заголовок: Re:


Dima пишет:

 цитата:
Что скажешь Юра ? ;)



да фигня какая-то

про aofgotop и прочие перемещения ваще забудь. все эти виртуальные указатели во-первых глючат, во-вторых не нужны
надо использолвать реальные перемещения по базе

второе. как я уже сказал - для заморочек нужны ОСНОВАНИЯ! Я уверен, что у тебя не тот случай, когда ты сможешь сделать выборку эффективней, чем сам сикс с помощью ПРОСТОГО SET FILTER TO &ПолноеИОкончательноеУсловиеФильтра

зачем делать addRange, а потом бегать выкидывать записи вместо одного единственного set filter to? Можешь объяснить?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 767
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.07 14:42. Заголовок: Re:


suv2 пишет:

 цитата:
зачем делать addRange


Человек может выбрать марку автомобиля , фирму производителя , группу товара - это все формирую с
помощью addrange , при чем выбор может быть списком. Выражение фильтра может получится очень
длинным и clipper вместе c ADS его не поймет. Не помню но вроде максимальная длина была 254 символа.
И уже потом я выкидываю из фильтра записи если чел еще делает запрос на поиск кода и названия по вхождению. Например он выбрал марку авто NISSAN и хочет что бы были показаны те запчасти в индексе (код товара) присутсвует скажем MS25.
Ну и как это безобразие реализовать с помощью обычного SET FILTER ? ;)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 768
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.07 14:47. Заголовок: Re:


Кстати подскажи тогда как корректней сделать

figa:=aofCountRecords(handl)
aofgotop(handl) // это пожалуй можно убрать , согласен
for i=1 to figa

volvo->(dbgoto(aofGetRecord(handl)))

if &cblch==.f. // это условие переданное в символьном виде , не важно в обчем ;)
aofRemoveRecord(handl,aofGetRecord(handl))
endif
aofskip(handl)
next


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 108
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 23.07.07 15:19. Заголовок: Re:


Dima пишет:

 цитата:
Выражение фильтра может получится очень
длинным и clipper вместе c ADS его не поймет. Не помню но вроде максимальная длина была 254 символа.


Ограничение на длину - понятно. Задача решается так:
вместо set filter to A="A" .and.B="B"
set filter to A="A" ; F1:=m6_FiltCopy(m6_GetAreaHandle())
set filter to B="B" ; F2:=m6_FiltCopy(m6_GetAreaHandle())
m6_FiltJoin(F1,F2,JOIN_INTERSECT)
m6_SetAreaFilter(F1)

Непонятно, как связана задача преодоление ограничения длины выражения фильтра и твоё выкидывание из фильтра.
В твоем случае (nissan + MS25) ничего выкидывать не надо
set filter to marka="NISSAN" .and. "MS25" $ KODTOVARA

Если выражение длинное - делай как сказано выше.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 769
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.07 16:47. Заголовок: Re:


suv2 пишет:

 цитата:
set filter to A="A" ; F1:=m6_FiltCopy(m6_GetAreaHandle())
set filter to B="B" ; F2:=m6_FiltCopy(m6_GetAreaHandle())


Интерестный подход , надо взять на вооружение ;)
Фигово что сервак уже отдал и не на чем отладиться.....но что нить придумаю.
А SIX не покатит , задача под ADS и set axs locking on ;)
Спасибо за идею !!!!!!

ЗЫ
Век живи , век учись ;)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 109
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 23.07.07 17:27. Заголовок: Re:


в адс есть аналогичные функции
правда я остановился на адс-клиенте 5.0 - в более поздних версиях влиента все фильтры и операции с ними вели себя совершенно не так (или глюки или полностью изменившееся поведение)

Еще мысль - в адс есть серверные фильтры и там возможно ограничение 256 символов на выражение фильтра не действует. проверь


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 770
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.07 18:48. Заголовок: Re:


suv2 пишет:

 цитата:
в адс есть аналогичные функции


На всякий случай для тех кто не знает


 цитата:

The following is an alphabetized list of the "Client" Advantage
Optimized Filter functions and the equivalent MachSix and ClipMore
functions, if applicable. Keep in mind that the Client Advantage
Optimized Filter function may not be an EXACT match in syntax and
functionality to the MachSix and ClipMore functions listed:

aofAddRange
Equivalent functions: M6_AddScoped, rlSetLoHigh

aofAddRecord
Equivalent functions: M6_FiltAddRec, rlSet

aofAndFilter
Equivalent functions: M6_FiltJoin, rlAnd

aofCopyFilter
Equivalent functions: M6_FiltCopy, rlNewDup

aofCountRecords
Equivalent functions: M6_FiltCount, M6_RecCount, rlCount, cmFiltCount

aofCreateFilter
Equivalent functions: M6_NewFilter, rlNew, rlNewQuery

aofDbEval
Equivalent functions: M6_dbEval

aofDestroyFilter
Equivalent functions: cmDestroyFilter

aofErrorCode
Equivalent functions: M6_Error

aofFileToFilter
Equivalent functions: M6_FiltRestore

aofFilterInfo
Equivalent functions: M6_FiltInfo

aofFiltToFile
Equivalent functions: M6_FiltSave

aofFiltToSystem
Equivalent functions: M6_SetAreaFilter, rlSetFilter

aofFiltToUser
Equivalent functions: M6_ChgOwner, rlExFilter

aofFreeFilter
Equivalent functions: M6_FreeFilter, rlDestroy

aofGetAutoResolve
Equivalent functions: cmGetLinear

aofGetFilterHandle
Equivalent functions: M6_GetAreaFilter, rlGetFilter

aofGetMaxRecords
Equivalent functions: rlLen

aofGetOptLevel
Equivalent functions: M6_IsFilter, rlOptLevel

aofGetRecord
Equivalent functions: none

aofGetVersion
Equivalent functions: M6_Version, cmVersion

aofGoBottom
Equivalent functions: M6_FiltBott

aofGoRecord
Equivalent functions: M6_FiltGoRec

aofGoTop
Equivalent functions: M6_FiltTop

aofHasPartials
Equivalent functions: rlHasMaybe

aofIsOptimizable
Equivalent functions: M6_IsOptimize

aofIsRecordInFilter
Equivalent functions: M6_IsFiltRec, rlTest

aofKeyCount
Equivalent functions: cmKeyCount

aofKeyGoto
Equivalent functions: cmKeyGoto

aofKeyNo
Equivalent functions: cmKeyNo

aofNotFilter
Equivalent functions: M6_FiltInverse, rlNot

aofOrFilter
Equivalent functions: M6_FiltJoin, rlOr

aofRebuildFilter
Equivalent functions: M6_RefreshFilter

aofReFilter
Equivalent functions: cmReFilter

aofRemoveRecord
Equivalent functions: M6_FiltDropRec, rlClear

aofResolvePartial
Equivalent functions: M6_EvalPartial, rlMaybeEval, cmDoLinear

aofRestoreFilter
Equivalent functions: cmRestFilter

aofSaveFilter
Equivalent functions: cmSaveFilter

aofSetAutoResolve
Equivalent functions: cmSetLinear

aofSetFilter
Equivalent functions: M6_SetFilter, cmFilter

aofSkip
Equivalent functions: M6_FiltSkip, rlNextRecno, rlPrevRecno

aofSmartFilter
Equivalent functions: cmSmartFilter

aofToggleRecord
Equivalent functions: M6_FiltChgRec

aofVarToString
Equivalent functions: cm2Str

dbClearFilter
Equivalent functions: cmClrFilter

dbSkip
Equivalent functions: cmKeySkip





Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 771
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.07.07 08:35. Заголовок: Re:


suv2
Юрчик насчет эффективного (не избытычного) использования фильтров я понял.
Может подскажешь как эффективно под ADS (без SIX) производить поиск по вхождению.
Записей в базе порядка 1 500 000 :)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 110
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 24.07.07 11:16. Заголовок: Re:


гипертекстовый индекс (*.hsx)
см asc.exe

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 772
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.07.07 15:18. Заголовок: Re:


suv2 пишет:

 цитата:
гипертекстовый индекс (*.hsx)


Вопросики :)
Установка set axs locking on не будет мешать ?
Могу ли я создавать и корректировать эти индексы если база открыта в Shared ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 111
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 27.07.07 12:06. Заголовок: Re:


1.не будет
2. да. но коррекция индексов в hsx идет не на уровне RDD, а на уровне пользователя
rlock
field:="new"
hsReplace(HsxHandle,HsxKey)
unlock

можно запихнуть вызов обновления hsx-ключа в функцию dbrUnlock/sx_Unlock (добавления в append blank. удаления в dbDelete() восстановления в recall)
но если используется техника блокировки всего файла целиком (вместо блокировки отдельных записей) - это не поможет

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

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