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




Пост N: 6152
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.11.16 23:13. Заголовок: Scope + Descend


Что то я потерялся наверное или лыжи не едут....
Имеем индекс с таким ключем
index on str(nomer,6)+descend(dtos(data_z)) to tmpnmn1

Пытаюсь поставить SCOPE
 
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())
.
.
.


Результат пишу в файл и в нем оказывается аж август месяц.
Если без Descend то все нормально.

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


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




Пост N: 1331
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.16 23:25. Заголовок: Dima Descend в свои..


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

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




Пост N: 6153
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.11.16 23:34. Заголовок: SergKis пишет: Desc..


SergKis пишет:

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


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

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




Пост N: 1332
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.16 23:41. Заголовок: ты, случайно top и t..


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

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




Пост N: 6154
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.11.16 23:45. Заголовок: SergKis Тоже была т..


SergKis
Тоже была такая мысль , попробовал и результат такой же

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

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




Пост N: 1333
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.16 23:58. Заголовок: Dima по виду dth8-4..


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

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




Пост N: 6155
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.11.16 00:00. Заголовок: Да str одинаковая..


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

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




Пост N: 6156
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.11.16 00:01. Заголовок: Сделаю тестик завтра..


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

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




Пост N: 1334
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.11.16 00:07. Заголовок: Dima Descend можно ..


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

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




Пост N: 3505
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.16 08:11. Заголовок: Должно работать Откр..


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

диапазон установился так, как ему и положено: сначала даты от 01.03.16, и так далее до 01.01.16

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




Пост N: 3506
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.16 08:24. Заголовок: Если scope нужен для..


Если scope нужен для цикла, то scopetop можно не устанавливать.
Я делаю так:

dbOrderInfo(DBOI_SCOPEBOTTOM,,, <exp2>)
dbSeek(<exp1>, .t.)
while ! eof()
...
enddo
dbOrderInfo(DBOI_SCOPEBOTTOMCLEAR)


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




Пост N: 6157
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.11.16 08:34. Заголовок: Pasha пишет: Создал..


Pasha пишет:

 цитата:
Создал индекс по выражению Descend(DTOS(Date))


А если впереди прицепить STR() по какому то полю

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




Пост N: 3507
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.16 08:49. Заголовок: Разницы не будет, эт..


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

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




Пост N: 6158
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.11.16 09:04. Заголовок: Pasha пишет: Есть е..


Pasha пишет:

 цитата:
Есть еще такой момент: soft seek надо делать после установки scopebottom


Кажется заработало
Сделал так
 
karta->(dbOrderInfo(DBOI_SCOPEBOTTOM,,,scp1))
karta->(dbseek(scp,.t.))
if !karta->(eof())


Паш спасибо !!!

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




Пост N: 6159
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.11.16 09:21. Заголовок: Pasha А такой вопро..


Pasha
А такой вопрос по SCOPE
Если Seek НЕ Soft , то такая конструкция будет же работать и после ScopeBottom , Seek повторно делать не надо ?
 
if dbseek(user_kod)
dbOrderInfo(DBOI_SCOPETOP,,,user_kod)
dbOrderInfo(DBOI_SCOPEBOTTOM,,,user_kod)

do while !eof()
// обработка

Ведь в теории Scope не перемещает указатель записи а просто ограничивает область видимости индекса

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




Пост N: 3508
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.16 10:18. Заголовок: Так и есть. Даже есл..


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

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




Пост N: 6160
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.11.16 10:26. Заголовок: Pasha Тогда я не со..


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 прицепить , поправил

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




Пост N: 3509
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.11.16 10:37. Заголовок: karta->(dbseek(s..


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


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




Пост N: 6161
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.11.16 10:39. Заголовок: Pasha Понял. Спаси..


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

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

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