Форум » [x]Harbour » Scope + Descend » Ответить

Scope + Descend

Dima: Что то я потерялся наверное или лыжи не едут.... Имеем индекс с таким ключем index on str(nomer,6)+descend(dtos(data_z)) to tmpnmn1 Пытаюсь поставить SCOPE [pre2] dth8:=Date()-1 nmr:=nomen->nomer scp:= str(nmr,6)+dtos(dth8-45) scp1:= str(nmr,6)+dtos(dth8) karta->(dbseek(scp1,.t.)) if !karta->(eof()_ karta->(dbOrderInfo(DBOI_SCOPETOP,,,scp1)) karta->(dbOrderInfo(DBOI_SCOPEBOTTOM,,,scp)) do while !karta->(eof()) . . . [/pre2] Результат пишу в файл и в нем оказывается аж август месяц. Если без Descend то все нормально.

Ответов - 18

SergKis: Dima Descend в свои выражения включи (csp, csp1)

Dima: SergKis пишет: Descend в свои выражения включи (csp, csp1) Если бы все так было просто... уже играл с этим , не пашет Я про это scp:= str(nmr,6)+descend(dtos(dth8-45)) scp1:= str(nmr,6)+descend(dtos(dth8))

SergKis: ты, случайно top и tom местами не путаешь, т.е. scp и scp1


Dima: SergKis Тоже была такая мысль , попробовал и результат такой же ЗЫ Убираю Descend и все в шоколаде , не понятно почему...... Меняя при этом scp и scp1 , верхний с меньшими значениями. Если с Descend то наоборот , хотя игрался и без такого вмешательства. До лампочки...

SergKis: Dima по виду dth8-45 < dth8, а str(...) одинаковая ... подсвети вывод значения ключа, бывает, если в выражениях что то не так - вся база лезет и не поймешь сразу этого

Dima: Да str одинаковая

Dima: Сделаю тестик завтра простой и выложу

SergKis: Dima Descend можно взять от даты, потом преобразования

Pasha: Должно работать Открыл через dbedit большой файл с полем Date, D, 8, 0 Создал индекс по выражению Descend(DTOS(Date)) Поставил scope: top: Descend("20160301") bottom: Descend("20160101") диапазон установился так, как ему и положено: сначала даты от 01.03.16, и так далее до 01.01.16

Pasha: Если scope нужен для цикла, то scopetop можно не устанавливать. Я делаю так: dbOrderInfo(DBOI_SCOPEBOTTOM,,, <exp2>) dbSeek(<exp1>, .t.) while ! eof() ... enddo dbOrderInfo(DBOI_SCOPEBOTTOMCLEAR)

Dima: Pasha пишет: Создал индекс по выражению Descend(DTOS(Date)) А если впереди прицепить STR() по какому то полю

Pasha: Разницы не будет, это же константа для цикла получается. Есть еще такой момент: soft seek надо делать после установки scopebottom

Dima: Pasha пишет: Есть еще такой момент: soft seek надо делать после установки scopebottom Кажется заработало Сделал так [pre2] karta->(dbOrderInfo(DBOI_SCOPEBOTTOM,,,scp1)) karta->(dbseek(scp,.t.)) if !karta->(eof()) [/pre2] Паш спасибо !!!

Dima: Pasha А такой вопрос по SCOPE Если Seek НЕ Soft , то такая конструкция будет же работать и после ScopeBottom , Seek повторно делать не надо ? [pre2] if dbseek(user_kod) dbOrderInfo(DBOI_SCOPETOP,,,user_kod) dbOrderInfo(DBOI_SCOPEBOTTOM,,,user_kod) do while !eof() // обработка [/pre2] Ведь в теории Scope не перемещает указатель записи а просто ограничивает область видимости индекса

Pasha: Так и есть. Даже если текущая запись выходит за пределы scope, она останется текущей после его установки

Dima: Pasha Тогда я не совсем понял , почему при таком подходе получил косяк. Dima пишет: dth8:=Date()-1 nmr:=nomen->nomer scp:= str(nmr,6)+descend(dtos(dth8-45)) scp1:= str(nmr,6)+descend(dtos(dth8)) karta->(dbseek(scp1,.t.)) if !karta->(eof()) karta->(dbOrderInfo(DBOI_SCOPETOP,,,scp1)) karta->(dbOrderInfo(DBOI_SCOPEBOTTOM,,,scp)) do while !karta->(eof()) А ежели после DBOI_SCOPEBOTTOM сделать дополнительный karta->(dbseek(scp1,.t.)) то все будет нормально. PS забыл Descend прицепить , поправил

Pasha: karta->(dbseek(scp1,.t.)) без установки scope может найти не ту запись, например, залезть в август, и эта запись попадет в цикл. Если выдать seek после scope, то все будет в порядке. Но тогда seek до scope будет лишний.

Dima: Pasha Понял. Спасибо



полная версия страницы