Возвращаюсь к этой теме повторно !
Раньше было получено рабочее решение:
условной индексации по БД из 60 000 записей, имеющей 263 поля и занимающей 55 Мб решается так:
nKolRecords := LASTREC()
cIndexTo := "PADL(ALLTRIM(FIELD->CNumKvar),5)"
cFilterTo := "NN==2010490.AND.!DELETED()"
----------------------------------------------------------------------------------
INDEX ON &cIndexTo TAG "ONE" TO ("temp.cdx") ;
EVAL SAY_PROC() ;
EVERY nKolRecords / 10 ;
WHILE &cFilterTo ADDITIVE // замена на FOR &cFilterTo ADDITIVE увеличивает построение индекса на 6 сек.
ORDSETFOCUS( "ONE" )
DBSETORDER(INDEXORD())
DBGOTOP()
где SAY_PROC() - функция рисования бегунка, возвращает всегда .T.
Сейчас потребовалась выборка по дате:
cIndexTo := "DTOS(FIELD->DATEPRIX)+STR(FIELD->TIMEPRIX)"
cFilterTo := "DATEVvod=CTOD("26.02.11).AND.KOPERAT=101.AND.!DELETED()"
---------------------------------------------------------------------------------
INDEX ON &cIndexTo TAG "ONE" TO ("temp.cdx") ;
EVAL SAY_PROC() ;
EVERY nKolRecords / 10 ;
WHILE &cFilterTo ADDITIVE
ORDSETFOCUS( "ONE" )
DBSETORDER(INDEXORD())
DBGOTOP()
Индекс строится мгновенно, но функция FOUND() всегда возвращает .F. - хотя если поставить заместо WHILE ---> FOR то нормально работает, правильно возвращает.
но FOR - строит медленнее... чем WHILE .....
В чем дело, тип ДАТА или ЧИСЛА неправильно в фильтре ??? или еще чего ??? подскажите пожалуйста.