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




Пост N:2649
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:01.03.13 18:51.Заголовок:Idx , Ntx vs Cdx


Так уж сложилось что начинал с NTX индексов , затем пересел на IDX (Six , Ads)
Эти индексные файлы можно подключать к базе в произвольном порядке.
А как дело обстоит в CDX ?

ЗЫ
Хочу прогу переделать с ADS (IDX) на LetoDB (CDX). Пока не представляю
с какими трудностями придется столкнуться.

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


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




Пост N:2715
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:01.03.13 19:17.Заголовок:CDX - драйвер в Клип..


CDX - драйвер в Клипере появился в 5.3, это (насколько помню) MsFox - драйвер, аналогичный SIX.
Да они все примерно одинаковые. Драйвер классный, в одном индексном файле можно держать ХХХ количество индексных ключей. Работать с ним тоже нужно уметь, я с ним на возился в свое время.
Я с 1996 года делаю так: в одном файле - одно индексное выражение (так как в винде нет теперь ограничения по файлам, ДОС-255 ). Перед созданием индекса, удаляю сам индексный файл (если он уже есть), это связано с тем что при построение индекса, новый индекс добавляется к существующему. И тогда нужно помнить на какое индексное выражение переключаться в программе. А так получается ОДНА база и МНОГО индексных файлов. В каком порядке открыл индексные файлы, в таком и пользуешься, переключаешь функцией DBSETORDER(N).
Далее по индексу "влет" можно построить другой индексный файл (временный) и по ней работать с базой.
Какие нужны будут примеры, обращайся, помогу.
Так что трудностей по переходу не должно предвидеться.

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




Пост N:2650
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:01.03.13 21:59.Заголовок:Andrey Поиграюсь са..


Andrey
Поиграюсь сам. Если будут вопросы , задам. Спасибо !

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



Пост N:145
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:01.03.13 22:27.Заголовок:Andrey пишет:А так п..


Andrey пишет:
 цитата:
А так получается ОДНА база и МНОГО индексных файлов.


Не соглашусь. LetoDB(CDX) - ОДНА база, ОДИН индексный файл и много TAG-ов, к которым можно (и возможно лучше) обращаться по имени, а не только по номеру (например: DbSetOrder("KOD"), DbSetOrder("NAME"), ...). Имея много Tag-ов, можно комбинировать SetScope и SetFilter оптимистический. Не забудьте об использовании RDD MEMIO для выборок, tmp файлов - очень удобно.

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




Пост N:2716
Зарегистрирован:12.09.06
ссылка на сообщение  Отправлено:01.03.13 23:03.Заголовок:SergKis пишет: ОДИН..


SergKis пишет:

 цитата:
ОДИН индексный файл и много TAG-ов, к которым можно (и возможно лучше) обращаться по имени, а не только по номеру (например: DbSetOrder("KOD"), DbSetOrder("NAME"), ...). Имея много Tag-ов, можно комбинировать SetScope и SetFilter оптимистический. Не забудьте об использовании RDD MEMIO для выборок, tmp файлов - очень удобно.


Согласен с этим. Просто как кто привык работать.
А кто-то (я себя имею ввиду) и не стал дальше двигаться, текучка заедает... Занимаешься не программированием, а обслуживанием своих программ... Это тяжко...

А вот как пользоваться "Имея много Tag-ов, можно комбинировать SetScope и SetFilter оптимистический" я бы хотел узнать.
Если не сложно, можно пожалуйста небольшой примерчик ?


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




Пост N:2709
Зарегистрирован:23.05.05
ссылка на сообщение  Отправлено:02.03.13 00:14.Заголовок:Мне было проще, поск..


Мне было проще, поскольку я в ads использовал индексы cdx, а это та же идеология, которая используется в harbour/letodb. Поэтому с переходом проблем не было.
Сейчас посмотрел сырцы харбора, и увидел, что индексы idx не поддерживаются.
Общий принцип работы с cdx: при открытии файла сразу надо открывать/создавать все используемые индексы. Даже если они в данной программе, или процедуре, или в текущем контексте не нужны. Если программа обновляет данные, то должны обновляться все индексы, даже если они этой программе не нужны. Вторая программа, или процедура, которая использует индексы, не обновленные первой программой, не увидит обновленные данные. Если программа не обновляет данные, то такая ситуация некритична. Но это частный случай.
Обращаться к индексу (тэгу) можно и по номеру, и по имени. Я обращаюсь по номеру, поскольку тэги создаю в строго определенном порядке, но это необязательно. Можно и по имени.
Лучшим решением я считаю упорядочить работу с индексами, а именно: для каждого файла определить обязательный перечень его индексов, и сразу их открывать/создавать при открытии файла.


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



Пост N:146
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:02.03.13 10:02.Заголовок:Паша пишет:Лучшим ре..


Паша пишет:
 цитата:
Лучшим решением я считаю упорядочить работу с индексами, а именно: для каждого файла определить обязательный перечень его индексов, и сразу их открывать/создавать при открытии файла


Абсолютно согласен, тем более, что в LetoDB стоит SetAutoOpen ON - индексный файл (при наличии) подключается сразу с DbSetOrder(0), что есть правильно - индексы ведутся и всегда актуальны.

Andrey пишет:
 цитата:
А вот как пользоваться "Имея много Tag-ов, можно комбинировать SetScope и SetFilter оптимистический" я бы хотел узнать.


SetScope(0, _FIELD->R_CEX=='0100')
SetScope(1, _FIELD->R_CEX=='0100')
cFltr := "DtoS(_FIELD->R_DATE) >= '20130101' .and. DtoS(_FIELD->R_DATE) <= '20130131'"
Set Filter To &cFltr
dbGoTop()

Паша пишет:
 цитата:
После dbSetFilter надо вызвать проверку: LETO_ISFLTOPTIM()
Фильтр может быть неоптимальным (клиентским), если в нем присутствуют переменные памяти или вызовы функций, незарегистрированных на сервере. Еще сервер не поймет ссылки на другие рабочие области. Я не рассматриваю случай просто неверного выражения.



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




Пост N:2651
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:02.03.13 11:10.Заголовок:Получается что если ..


Получается что если сегодня IDX индексы создаю так
 
use nomen new
index on nomer to n1
index on ndok to n2
close nomen
use nomen index n1,n2 new


То для перехода на CDX достаточно сделать так
 
use nomen new

index on nomer tag "n1" to n1
index on ndok tag "n2" to n2

close nomen
use nomen index n1,n2 new


И вопрос про Dbsetorder. C IDX использую его для установки управляющего индекса
А как в CDX в моем случае ? Если я верно понял если в индексном файле всего 1 тег
тогда можно юзать Dbsetorder , если не один тогда OrdSetFocus. Искал понятный
мне аналог SIX функции Sx_SetTag и не нашел.

Каково максимальное кол-во тегов может быть в одном индексном файле ?

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


Пост N:839
Зарегистрирован:27.01.07
ссылка на сообщение  Отправлено:02.03.13 13:36.Заголовок:INDEX ON <expKey..


INDEX ON <expKey> [ TAG <cOrderName>] [ TO <cOrderBagName>]

т.е.:
index on nomer tag "n1" to IndexFile
index on ndok tag "n2" to IndexFile

close nomen
use nomen index IndexFile new
OrdSetFocus( 1 ) // или нужный индекс

Можно функцией: ORDCREATE(<cOrderBagName>, [<cOrderName>], <cExpKey>, <bExpKey>, [<lUnique>])


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




Пост N:2652
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:02.03.13 14:15.Заголовок:PSP пишет: INDEX ON..


PSP пишет:

 цитата:
INDEX ON <expKey> [ TAG <cOrderName>] [ TO <cOrderBagName>]

т.е.:
index on nomer tag "n1" to IndexFile
index on ndok tag "n2" to IndexFile


Да это я понял сразу.
Просто при том подходе который я указал , переделок будет минимум.
Я про это
Dima пишет:

 цитата:
use nomen new

index on nomer tag "n1" to n1
index on ndok tag "n2" to n2

close nomen
use nomen index n1,n2 new




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




Пост N:2653
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:02.03.13 15:08.Заголовок:По ходу еще вопрос. ..


По ходу еще вопрос. Можно ли проиндексировать один тег внутри составного индекса ?


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


Пост N:563
Зарегистрирован:06.07.06
ссылка на сообщение  Отправлено:02.03.13 15:54.Заголовок:Dima пишет: Получае..


Dima пишет:

 цитата:
Получается что если сегодня IDX индексы создаю так

use nomen new
index on nomer to n1
index on ndok to n2
close nomen
use nomen index n1,n2 new

То для перехода на CDX достаточно сделать так
...


Нет необходимости ничего менять. Оставьте как есть, просто вместо idx индексов будут создаваться cdx, имя тэга по умолчанию будет то же, что имя индексного файла. Непонятно только, зачем закрывать файл и опять открывать. Если хотите, чтобы set index не закрывал уже открытые другие индексы, используйте additive.

 цитата:
И вопрос про Dbsetorder. C IDX использую его для установки управляющего индекса
А как в CDX в моем случае ? Если я верно понял если в индексном файле всего 1 тег
тогда можно юзать Dbsetorder , если не один тогда OrdSetFocus


В обоих случаях можно использовать и то, и другое. Если тэгов несколько, то лучше ordSetFocus(имятэга), так как сохранение определенного порядка следования тэгов никто не гарантирует.

 цитата:
По ходу еще вопрос. Можно ли проиндексировать один тег внутри составного индекса ?


Без проблем. Смысла, правда, большого не вижу. Сделайте reindex - и все.

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




Пост N:2654
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:02.03.13 16:06.Заголовок:alkresin пишет: Нет..


alkresin пишет:

 цитата:
Нет необходимости ничего менять


Вообще то есть.
План перехода [1]ADS(IDX) -> [2]ADS(CDX) ->[3]Обкатка ->[4]LetoDB(CDX)->[5]Обкатка
Если оставить все как есть , то с пунктом [2] будет проблемка так как будут созданы IDX файлы.

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


Пост N:564
Зарегистрирован:06.07.06
ссылка на сообщение  Отправлено:02.03.13 17:40.Заголовок:Dima пишет: План пе..


Dima пишет:

 цитата:
План перехода [1]ADS(IDX) -> [2]ADS(CDX) ->[3]Обкатка ->[4]LetoDB(CDX)->[5]Обкатка
Если оставить все как есть , то с пунктом [2] будет проблемка так как будут созданы IDX файлы.


Ну так выкиньте этот пункт.
Я говорю о том, что если вы не хотите менять свои программы, то можете этого не делать. Все будет работать, только индексы будут cdx.
По хорошему надо, конечно, использовать возможности cdx, но для этого придется переработать код. Я это делал больше 15 лет назад, когда переходил с ntx на cdx. Для каждого dbf есть основные индексы, их имеет смысл поместить как тэги в составной cdx с тем же именем, что и dbf - тогда он будет открываться автоматически вместе с dbf, все тэги будут, соответственно, обновляться автоматически. Временные индексы имеет смысл размещать в файлах с другими именами, чтоб не "засорять" основной индексный файл.

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





Пост N:46
Зарегистрирован:05.10.06
ссылка на сообщение  Отправлено:12.10.13 15:08.Заголовок:Подскажите, а как ну..


Подскажите, а как нужно собирать программу для использования CDX? Я прилинковал dbfcdx.lib, но функция rddlist() не выдала доступного драйвера DBFCDX. Может нужно убрать сначала DBFNTX из компановки?

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




Пост N:3621
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:12.10.13 15:24.Заголовок:MIKHAIL REQUEST DBF..


MIKHAIL
REQUEST DBFCDX
rddSetDefault("DBFCDX")

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





Пост N:47
Зарегистрирован:05.10.06
ссылка на сообщение  Отправлено:12.10.13 15:39.Заголовок:У меня Clipper 5.3 П..



 цитата:
REQUEST DBFCDX
rddSetDefault("DBFCDX")



У меня Clipper 5.3 При сборке выдает ошибку:
BLINKER : 1115 : C:\CLIP\LIB\DBFCDX.LIB(CL53INIT) : '_DBFCDX' : unresolved external

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




Пост N:3622
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:12.10.13 15:42.Заголовок:MIKHAIL пишет: У ме..


MIKHAIL пишет:

 цитата:
У меня Clipper 5.3


А раздел этот Harbour , значит не туда пишешь !

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





Пост N:48
Зарегистрирован:05.10.06
ссылка на сообщение  Отправлено:12.10.13 15:51.Заголовок:А раздел этот Harbou..



 цитата:
А раздел этот Harbour , значит не туда пишешь !


Тема актуальна для обеих систем. Тем более что Harbour логическое продолжение Clipper. Если я открою аналогичную ветку в другом разделе и начну задавать те же вопросы, мне кажется это усложнит систематизацию знаний и помощь в решении для других нуждающихся...

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




Пост N:3623
Зарегистрирован:17.05.05
ссылка на сообщение  Отправлено:12.10.13 15:58.Заголовок:http://clipper.borda..

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





Пост N:49
Зарегистрирован:05.10.06
ссылка на сообщение  Отправлено:12.10.13 16:41.Заголовок:Спасибо большое. Одн..


Спасибо большое. Однако остался вопрос по использованию драйвера DBFCDX. У них другие форматы memo-поля FPT. Как в таком случае обеспечить совместимость? Нужно специальную процедуру писать по импорту файлов в новый формат или есть другие способы использования DBT ?

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

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