Переиндексация в программе

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Переиндексация в программе

Сообщение Андрей »

Хочу сделать в программе сервисную процедурку для переиндексации всех таблиц.
Пусть на шаблоне Window. Пробую на 1 файле: указываю его в Other Files, на кнопочку вешаю такой код

Код: Выделить всё

Access:UstTrf.Close()
Access:UstTrf.SetOpenMode(ReadWrite+DenyAll)
Access:UstTrf.Open()
SEND(UstTrf,'FULLBUILD=on')
Build(UstTrf)
SEND(UstTrf,'FULLBUILD=off')
Access:UstTrf.Close()
Access:UstTrf.SetOpenMode(42h)
Access:UstTrf.Open()
Получаю "Could not get write Access....."
Если не писать Access:UstTrf.SetOpenMode(ReadWrite+DenyAll), то получаю "build NameFile Exclusive Access Required"
Как правильно или как по-другому ?
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

Re: Переиндексация в программе

Сообщение seawolf »

Видимо будет достаточно Open(UstTrf)
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Переиндексация в программе

Сообщение kreator »

Из хелпа:

Код: Выделить всё

Example:
Names   FILE,DRIVER('TopSpeed'),PRE(Nam)  !Declare a file structure
NameKey  KEY(Nam:Name),OPT                !Declare name key
NbrNdx   INDEX(Nam:Number),OPT            !Declare number index
DynNdx   INDEX()                          !Declare a dynamic index
Rec      RECORD
Name      STRING(20),NAME('Nam:Name')
Number    SHORT,NAME('Nam:Number')
        END
       END

CODE
OPEN(Names,12h)                          !Open file, exclusive read/write
BUILD(Names)                             !Build all keys on Names file
BUILD(Nam:NbrNdx)                        !Build the number index
!Build dynamic index ascending number, ascending name:
BUILD(Nam:DynNdx,'+Nam:Number,+Nam:Name')
BIND('Nam:Name',Nam:Name)                !BIND the filter variable
!Build dynamic index of names that start with A:
BUILD(Nam:DynNdx,'+Nam:Name','UPPER(Nam:Name[1]) = A')
UNBIND('Nam:Name')                       !UNBIND the filter variable
Т.е. файл надо открывать в монопольном режиме. Что при работе в сети малореализуемо. А, если файлы TPS, то, вообще, это делать не надо. Если есть проблемы с файлом, то нужно использовать утилиту TPSFIX.
И, ещё. Давно-давно был шаблон, который файл конвертит в новую структуру с соответствующем сервисом при загрузке программы. Удобно для обновлений.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Переиндексация в программе

Сообщение Yufil »

Мож, скобочки Lock-Unlock помогут?
Ал
✯ Ветеран ✯
Сообщения: 1038
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Re: Переиндексация в программе

Сообщение Ал »

Access:UstTrf.Close
Access:UstTrf.Open
Access:UstTrf.UseFile
...
Access:UstTrf.Close
Ответить