Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Транзакции в FoxPro, локальный индекс / 4 сообщений из 4, страница 1 из 1
30.08.2006, 10:08
    #33951462
DinaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в FoxPro, локальный индекс
Пытаюсь освоить механизм транзакций в FoxPro. Время от времени у пользователей возникает "неуловимая" ошибка: 1548 Таблица имеет локальный индекс во время транзакции.
Не понимаю, откуда берутся эти индексы (я же их закрываю, да и не должно быть у моих таблиц локальных индексов). Повторить ошибку у меня не получается. Может, кто-нибудь сталкивался с подобным. Помогите, пожалуйста, советом. Вот кусок кода:

LOCAL lcProdLot_index, lcProdRepD_index
Select ProdLot
lcProdLot_index=Set("Index")
Close Indexes
Select ProdRepD
lcProdRepD_index=Set("Index")
Close Indexes

Begin Transaction && НА ЭТУ СТРОКУ ВЫДАЕТСЯ ОШИБКА
If TableUpdateOne('ProdLot') and TableUpdateOne('ProdRepD')
End Transaction
Else
RollBack
=MessageOK('Не могу сохранить. Попробуйте позднее.') =TableRevert(.T.,'ProdLot')
=TableRevert(.T.,'ProdRepD')
EndIf

=SetTableBuff('ProdLot',.f.)
=SetTableBuff('ProdRepD',.f.)

ind1_=Substr(lcProdLot_index,1,At(',',lcProdLot_index)-1)
ind2_=Substr(lcProdRepD_index,1,At(',',lcProdRepD_index)-1)
If !Empty(ind1_)
Select ProdLot
Set Index To (ind1_) additive
EndIf
If !Empty(ind2_)
Select ProdRepD
Set Index To (ind2_) additive
Endif
****************************

func TableUpdateOne && Обновление одной записи
lparam tcTable
if Empty(tcTable)
tcTable=Alias()
endif
if !used(tcTable)
return .F.
endif
if cursorgetprop('Buffering',tcTable)>1
return TableUpdate(0, .t., tcTable)
else
flush
return .t.
endif
...
Рейтинг: 0 / 0
12.09.2006, 15:10
    #33981216
DinaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в FoxPro, локальный индекс
Таблицы открываются с пессимистической буферизацией на всю таблицу. В ProdLot изменяется одна уже существующая запись, в ProdRepD добавляется новая запись. Проблема: иногда запись в ProdRepD теряется тогда, как изменения в ProdLot сохраняются. Транзакции вводились для устранения этой проблемы, но не помогло.
Как правильно использовать транзакции в FoxPro? Работают ли они там вообще?
...
Рейтинг: 0 / 0
12.09.2006, 17:43
    #33981905
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в FoxPro, локальный индекс
Транзакция делает "мгновенный снимок" вообще всех открытых таблиц, а не только тех, которые участвуют в модификации.

Смотри не открыты ли еще какие-либо таблицы, не участвующие в модификации, но имеющие простые IDX-файлы и НЕ структурные CDX-файлы.

Не структурный CDX - это такой CDX имя которого отличается от имени файла DBF.
...
Рейтинг: 0 / 0
14.09.2006, 14:32
    #33987352
DinaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в FoxPro, локальный индекс
Большое спасибо Владимир!
Я не подумала, что транзакция заранее "не знает", какие таблицы я буду модифицировать, и сделает "снимок" всех таблиц вообще. Хотя бы в одной Data session?
По крайней мере, теперь есть где искать...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Транзакции в FoxPro, локальный индекс / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]