Страница 1 из 1

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

Добавлено: 15 Октябрь 2014, 0:55
Андрей
Хочу сделать в программе сервисную процедурку для переиндексации всех таблиц.
Пусть на шаблоне 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"
Как правильно или как по-другому ?

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

Добавлено: 15 Октябрь 2014, 6:36
seawolf
Видимо будет достаточно Open(UstTrf)

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

Добавлено: 15 Октябрь 2014, 10:13
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.
И, ещё. Давно-давно был шаблон, который файл конвертит в новую структуру с соответствующем сервисом при загрузке программы. Удобно для обновлений.

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

Добавлено: 15 Октябрь 2014, 11:41
Yufil
Мож, скобочки Lock-Unlock помогут?

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

Добавлено: 17 Октябрь 2014, 17:44
Ал
Access:UstTrf.Close
Access:UstTrf.Open
Access:UstTrf.UseFile
...
Access:UstTrf.Close