Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Пересоздание индекса  [new]
332_john
Member

Откуда:
Сообщений: 20
При удалении записей во view c индексами требует закрыть их но при их закрытии удаляется файл индекса.
Что придется снова создавать индексы?

В событии Load формы создаются индексы для view
[/src]CURSORSETPROP("Buffering", 3, lcAlias)
INDEX ON vocabview1.num1 TAG num1 OF vocabtmp1 FOR !DELETED("vocabview1")
INDEX ON vocabview1.num2 TAG num2 OF vocabtmp1 FOR !DELETED("vocabview1") ADDITIVE
INDEX ON STR(vocabview1.valnum, 4) TAG valnum OF vocabtmp1 ADDITIVE
INDEX ON vocabview1.xvalue1 TAG xvalue1 OF vocabtmp1 ADDITIVE

SET ORDER TO
CURSORSETPROP("Buffering", 5, lcAlias)
[src]

Затем в методе удаление
[/src]
ThisForm.LastIndex = SET("Index")

CURSORSETPROP("Buffering", 3, ThisForm.Alias)
 SET INDEX TO
CURSORSETPROP("Buffering", 5, ThisForm.Alias)

DELETE
BEGIN TRANSACTION
IF TABLEUPDATE(.F., .T., lcAlias) = .T.
  END TRANSACTION
....  
ELSE
  ROLLBACK
....
ENDIF
CURSORSETPROP("Buffering", 3, ThisForm.Alias)
 SET INDEX TO (ThisForm.lastIndex)          &&Индекса уже нет
CURSORSETPROP("Buffering", 5, ThisForm.Alias)

[src]
16 мар 06, 00:19    [2453445]     Ответить | Цитировать Сообщить модератору
 Re: Пересоздание индекса  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Создавай структурные индексы. Их закрывать не обязательно.

Дело в том, что vocabtmp1 - это алиас, а не имя файла DBF. Поэтому, хотя у тебя и получаются мультииндексные, но НЕ структурные файлы. Такие действительно надо удалять.

Т.е. синтаксис должен быть такой:

CURSORSETPROP("Buffering", 3, lcAlias)
select (m.lcAlias)
INDEX ON num1 TAG num1 FOR !DELETED()
INDEX ON num2 TAG num2 FOR !DELETED() 
INDEX ON STR(valnum, 4) TAG valnum
INDEX ON xvalue1 TAG xvalue1 

Нигде в выражении индекса не надо упоминать алиас. Структурный индексный файл не мешает работе. Допустим внутри транзакции. Нет необходимости его отключать. После перезапроса (Requery()) автоматически обновляется. При закрытии View автоматически будет уничтожен.
16 мар 06, 01:28    [2453526]     Ответить | Цитировать Сообщить модератору
 Re: Пересоздание индекса  [new]
332_john
Member

Откуда:
Сообщений: 20
да все получилось спасибо
16 мар 06, 15:32    [2456363]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить