Автор | Сообщение |
|
| |
Пост N: 2649
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.03.13 18:51. Заголовок: Idx , Ntx vs Cdx
Так уж сложилось что начинал с NTX индексов , затем пересел на IDX (Six , Ads) Эти индексные файлы можно подключать к базе в произвольном порядке. А как дело обстоит в CDX ? ЗЫ Хочу прогу переделать с ADS (IDX) на LetoDB (CDX). Пока не представляю с какими трудностями придется столкнуться.
|
|
|
Ответов - 24
, стр:
1
2
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 2715
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.13 19:17. Заголовок: CDX - драйвер в Клип..
CDX - драйвер в Клипере появился в 5.3, это (насколько помню) MsFox - драйвер, аналогичный SIX. Да они все примерно одинаковые. Драйвер классный, в одном индексном файле можно держать ХХХ количество индексных ключей. Работать с ним тоже нужно уметь, я с ним на возился в свое время. Я с 1996 года делаю так: в одном файле - одно индексное выражение (так как в винде нет теперь ограничения по файлам, ДОС-255 ). Перед созданием индекса, удаляю сам индексный файл (если он уже есть), это связано с тем что при построение индекса, новый индекс добавляется к существующему. И тогда нужно помнить на какое индексное выражение переключаться в программе. А так получается ОДНА база и МНОГО индексных файлов. В каком порядке открыл индексные файлы, в таком и пользуешься, переключаешь функцией DBSETORDER(N). Далее по индексу "влет" можно построить другой индексный файл (временный) и по ней работать с базой. Какие нужны будут примеры, обращайся, помогу. Так что трудностей по переходу не должно предвидеться.
|
|
|
|
| |
Пост N: 2650
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.03.13 21:59. Заголовок: Andrey Поиграюсь са..
Andrey Поиграюсь сам. Если будут вопросы , задам. Спасибо !
|
|
|
|
| постоянный участник
|
Пост 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 файлов - очень удобно.
|
|
|
|
| постоянный участник
|
Пост 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 оптимистический" я бы хотел узнать. Если не сложно, можно пожалуйста небольшой примерчик ?
|
|
|
|
| Администратор
|
Пост N: 2709
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.03.13 00:14. Заголовок: Мне было проще, поск..
Мне было проще, поскольку я в ads использовал индексы cdx, а это та же идеология, которая используется в harbour/letodb. Поэтому с переходом проблем не было. Сейчас посмотрел сырцы харбора, и увидел, что индексы idx не поддерживаются. Общий принцип работы с cdx: при открытии файла сразу надо открывать/создавать все используемые индексы. Даже если они в данной программе, или процедуре, или в текущем контексте не нужны. Если программа обновляет данные, то должны обновляться все индексы, даже если они этой программе не нужны. Вторая программа, или процедура, которая использует индексы, не обновленные первой программой, не увидит обновленные данные. Если программа не обновляет данные, то такая ситуация некритична. Но это частный случай. Обращаться к индексу (тэгу) можно и по номеру, и по имени. Я обращаюсь по номеру, поскольку тэги создаю в строго определенном порядке, но это необязательно. Можно и по имени. Лучшим решением я считаю упорядочить работу с индексами, а именно: для каждого файла определить обязательный перечень его индексов, и сразу их открывать/создавать при открытии файла.
|
|
|
|
| постоянный участник
|
Пост 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() Фильтр может быть неоптимальным (клиентским), если в нем присутствуют переменные памяти или вызовы функций, незарегистрированных на сервере. Еще сервер не поймет ссылки на другие рабочие области. Я не рассматриваю случай просто неверного выражения. |
|
|
|
|
|
| |
Пост 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 и не нашел. Каково максимальное кол-во тегов может быть в одном индексном файле ?
|
|
|
|
| постоянный участник
|
Пост 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>])
|
|
|
|
| |
Пост 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 |
|
|
|
|
|
| |
Пост N: 2653
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.03.13 15:08. Заголовок: По ходу еще вопрос. ..
По ходу еще вопрос. Можно ли проиндексировать один тег внутри составного индекса ?
|
|
|
|
| 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 - и все.
|
|
|
|
|
| |
Пост 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 файлы.
|
|
|
|
| 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, все тэги будут, соответственно, обновляться автоматически. Временные индексы имеет смысл размещать в файлах с другими именами, чтоб не "засорять" основной индексный файл.
|
|
|
|
| |
Пост N: 46
Зарегистрирован: 05.10.06
|
|
Отправлено: 12.10.13 15:08. Заголовок: Подскажите, а как ну..
Подскажите, а как нужно собирать программу для использования CDX? Я прилинковал dbfcdx.lib, но функция rddlist() не выдала доступного драйвера DBFCDX. Может нужно убрать сначала DBFNTX из компановки?
|
|
|
|
| |
Пост N: 3621
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.10.13 15:24. Заголовок: MIKHAIL REQUEST DBF..
MIKHAIL REQUEST DBFCDX rddSetDefault("DBFCDX")
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Пост N: 3622
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.10.13 15:42. Заголовок: MIKHAIL пишет: У ме..
MIKHAIL пишет: А раздел этот Harbour , значит не туда пишешь !
|
|
|
|
| |
Пост N: 48
Зарегистрирован: 05.10.06
|
|
Отправлено: 12.10.13 15:51. Заголовок: А раздел этот Harbou..
цитата: | А раздел этот Harbour , значит не туда пишешь ! |
| Тема актуальна для обеих систем. Тем более что Harbour логическое продолжение Clipper. Если я открою аналогичную ветку в другом разделе и начну задавать те же вопросы, мне кажется это усложнит систематизацию знаний и помощь в решении для других нуждающихся...
|
|
|
|
| |
Пост N: 3623
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.10.13 15:58. Заголовок: http://clipper.borda..
|
|
|
|
| |
Пост N: 49
Зарегистрирован: 05.10.06
|
|
Отправлено: 12.10.13 16:41. Заголовок: Спасибо большое. Одн..
Спасибо большое. Однако остался вопрос по использованию драйвера DBFCDX. У них другие форматы memo-поля FPT. Как в таком случае обеспечить совместимость? Нужно специальную процедуру писать по импорту файлов в новый формат или есть другие способы использования DBT ?
|
|
|
Ответов - 24
, стр:
1
2
All
[только новые]
|
|