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




Пост N: 2154
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.11.11 12:14. Заголовок: Обьясните, кто знает


Хочу создать 3 индекса, каждый в отдельном файле (bag)
Делаю:

Field Key, N1, N2

request DBFCDX

func main
rddSetdefault("DBFCDX")
dbCreate("tt", {{"KEY", "C", 4, 0}, {"N1", "N", 10, 0}, {"N2", "N", 10, 0}})
use tt new
index on Key tag tt to tt
? OrdKey(), ordCount() // Результат - 1 открытый индекс
index on n1 tag n1 to t1
? OrdKey(), ordCount() // Результат - 2 открытых индекса
index on n2 tag n2 to t2
? OrdKey(), ordCount() // Результат - 2 открытых индекса. А почему не 3 ?
return nil

После создания и открытия 2-го индекса 1-й остается открыт
А после открытия 3-го 2-й почему-то закрывается, а открытым остается только 1-й
Почему ?

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


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




Пост N: 1927
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.11.11 12:35. Заголовок: Нужна команда ADDITI..


Нужна команда ADDITIVE (не помню точно, а хелпа нет с собой), тогда индексы будут добавляться в стек, и переключаться между ними: Dbsetorder(1) 2, 3 ......

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




Пост N: 2155
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.11.11 12:51. Заголовок: Andrey пишет: Нужна..


Andrey пишет:

 цитата:
Нужна команда ADDITIVE (не помню точно, а хелпа нет с собой), тогда индексы будут добавляться в стек, и переключаться между ними: Dbsetorder(1) 2, 3 ......



Не то
Это опция команды set index, если она задана - не выдается OrdListClear
Я же выдаю index on
Почему-то при этом не все индексы остаются открытыми.
Обьясню, зачем мне это надо. Хочу создавать несколько temporary индексов. Создаю 2-й, а 1-й при этом закрывается, зараза.


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




Пост N: 2195
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.11.11 13:09. Заголовок: Pasha пишет: Это оп..


Pasha пишет:

 цитата:
Это опция команды set index



 
INDEX ON <indexExpr> ;
[TAG <cIndexName>] ;
[TO <cIndexFile>] ;
[FOR <lForCondition>] ;
[WHILE <lWhileCondition>] ;
[ALL] ;
[NEXT <nNumber>] ;
[RECORD <nRecNo>] ;
[REST] ;
[EVAL <bBlock>] ;
[EVERY <nInterval>] ;
[UNIQUE] ;
[ASCENDING|DESCENDING] ;
[USECURRENT] ;
[ADDITIVE] ;
[CUSTOM] ;
[NOOPTIMIZE] ;
[TEMPORARY] ;
[USEFILTER] ;
[EXCLUSIVE]



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




Пост N: 2156
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.11.11 13:29. Заголовок: Dima пишет: цитата..


Dima пишет:

 цитата:
цитата:
Это опция команды set index





INDEX ON <indexExpr> ; [TAG <cIndexName>] ; [TO <cIndexFile>] ; [FOR <lForCondition>] ; [WHILE <lWhileCondition>] ; [ALL] ; [NEXT <nNumber>] ; [RECORD <nRecNo>] ; [REST] ; [EVAL <bBlock>] ; [EVERY <nInterval>] ; [UNIQUE] ; [ASCENDING|DESCENDING] ; [USECURRENT] ; [ADDITIVE] ; [CUSTOM] ; [NOOPTIMIZE] ; [TEMPORARY] ; [USEFILTER] ; [EXCLUSIVE]



Спасибо, это то, что надо. Проглядел

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


Пост N: 79
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 15.11.11 13:30. Заголовок: Pasha пишет: Почему..


Pasha пишет:

 цитата:
Почему-то при этом не все индексы остаются открытыми.


На самом деле результат ordCount() у Вас должен быть 1
Двоечка т.к. совпадает имя базы, имя индекса и тага :)
index on Key tag ttt to tot
? OrdKey(), ordCount() // Результат - 1 открытый индекс
index on n1 tag n1 to t1
? OrdKey(), ordCount() // Результат - 1 открытых индекса
index on n2 tag n2 to t2
? OrdKey(), ordCount() // Результат - 1 открытых индекса.

Но если сделать вот так -

index on Key tag ttt to tt
? OrdKey(), ordCount() // Результат - 1 открытый индекс
index on n1 tag n1 to tt
? OrdKey(), ordCount() // Результат - 2 открытых индекса
index on n2 tag n2 to tt
? OrdKey(), ordCount() // Результат - 3 открытых индекса.

:)


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




Пост N: 2157
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.11.11 13:51. Заголовок: Так у меня разные ba..


Так у меня разные bagname для всех 3-х индексов, т.е. создаются

tt.cdx
t1.cdx
t2.cdx

в каждом по одному тэгу


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


Пост N: 80
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 15.11.11 14:04. Заголовок: Pasha пишет: в кажд..


Pasha пишет:

 цитата:
в каждом по одному тэгу


tt.cdx переименуйте в t0.cdx ( к примеру )
И Вы увидите , что при таком раскладе всегда открыт один индекс.

Если надо сразу три то создавайте один индексный файл с , но с разными тэгами
Попробуйте свой примерчик :))))

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



Пост N: 318
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 15.11.11 16:36. Заголовок: Паша, насколько я по..


Паша, насколько я понял, то ordcount() возвращает количество индексов в индексном файле. Если переделать прогу след. образом:

Field Key, N1, N2

request DBFCDX

func main
rddSetdefault("DBFCDX")
dbCreate("tt", {{"KEY", "C", 4, 0}, {"N1", "N", 10, 0}, {"N2", "N", 10, 0}})
use tt new
index on Key tag tt to tt
? OrdKey(), ordCount("tt"),ordbagname() // Результат - 1 открытый индекс
index on n1 tag n1 to t1
? OrdKey(), ordCount("t1"),ordbagname() // Результат - 2 открытых индекса
index on n2 tag n2 to t2
? OrdKey(), ordCount("t2"),ordbagname() // Результат - 2 открытых индекса. А почему не 3 ?
return nil

то в результате получим, что в каждом индексном файле по одному индексу:
Key 1 tt
n1 1 t1
n2 1 t2

А если прога следующая
Field Key, N1, N2

request DBFCDX

func main
rddSetdefault("DBFCDX")
dbCreate("tt", {{"KEY", "C", 4, 0}, {"N1", "N", 10, 0}, {"N2", "N", 10, 0}})
use tt new
index on Key tag tt to tt
? OrdKey(), ordCount("tt"),ordbagname() // Результат - 1 открытый индекс
index on n1 tag n1 to t1
index on n2 tag n2 to t1
? OrdKey(), ordCount("t1"),ordbagname() // Результат - 2 открытых индекса
index on n2 tag n2 to t2
? OrdKey(), ordCount("t2"),ordbagname() // Результат - 2 открытых индекса. А почему не 3 ?
return nil

то в результате получим:
Key 1 tt
n2 2 t1
n2 1 t2
т.е. в t1.cdx два индекса.

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



Пост N: 319
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 15.11.11 16:44. Заголовок: Еще как пример по or..


Еще как пример по ordcount можно посмотреть \harbour\contrib\hbnetio\tests\netiot03.prg , т.е. идет перебор индексов в индексном файле:

...
proc testdb( cName )
local i, j
use (cName)
? "used:", used()
? "nterr:", neterr()
? "alias:", alias()
? "lastrec:", lastrec()
? "ordCount:", ordCount()
for i:=1 to ordCount()
ordSetFocus( i )
? i, "name:", ordName(), "key:", ordKey(), "keycount:", ordKeyCount()
next
...

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




Пост N: 2158
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.11.11 17:00. Заголовок: AlexMyr пишет: Паша..


AlexMyr пишет:

 цитата:
Паша, насколько я понял, то ordcount() возвращает количество индексов в индексном файле.



Нет, это общее к-во тэгов во всех открытых индексных файлах

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


Пост N: 81
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 15.11.11 17:50. Заголовок: Pasha пишет: Нет, э..


Pasha пишет:

 цитата:
Нет, это общее к-во тэгов во всех открытых индексных файлах


Неааа :) это правильно только в том случае если все тэги в одном файле. Точнее количество тэгов в открытом файле ( индексном )
Вот Ваш исправленный пример :

index on Key tag ttt to tot
? OrdKey(), ordCount() // Результат - 1 открытый индекс
index on n1 tag n1 to t1
? OrdKey(), ordCount() // Результат - 1 открытых индекса
index on n2 tag n2 to t2
? OrdKey(), ordCount() // Результат - 1 открытых индекса.
Вот так он работает :)
Команда index on создает индекс и если Вы создаете их несколько , то открыт всегда последний.
Открывается командой

SET INDEX : Opens one or more index files in the current work area.
Syntax

SET INDEX TO [<cIndexFile,...>] [ADDITIVE]

Вот так ...

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




Пост N: 4715
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.04.15 16:04. Заголовок: Подниму старую темку..


Подниму старую темку

ММК пишет:

 цитата:
Pasha пишет:

цитата:
Нет, это общее к-во тэгов во всех открытых индексных файлах


Неааа :) это правильно только в том случае если все тэги в одном файле. Точнее количество тэгов в открытом файле ( индексном )



Так выяснили кто прав ?
Сделал примерчик.
use test new
index on first tag aaa
index on last tag bbb
index on street tag ccc to aats additive

? ordcount() // 3

Паша прав однако.




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

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