|
|
|
Транзакции в FoxPro, локальный индекс
|
|||
|---|---|---|---|
|
#18+
Пытаюсь освоить механизм транзакций в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 10:08 |
|
||
|
Транзакции в FoxPro, локальный индекс
|
|||
|---|---|---|---|
|
#18+
Таблицы открываются с пессимистической буферизацией на всю таблицу. В ProdLot изменяется одна уже существующая запись, в ProdRepD добавляется новая запись. Проблема: иногда запись в ProdRepD теряется тогда, как изменения в ProdLot сохраняются. Транзакции вводились для устранения этой проблемы, но не помогло. Как правильно использовать транзакции в FoxPro? Работают ли они там вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 15:10 |
|
||
|
Транзакции в FoxPro, локальный индекс
|
|||
|---|---|---|---|
|
#18+
Транзакция делает "мгновенный снимок" вообще всех открытых таблиц, а не только тех, которые участвуют в модификации. Смотри не открыты ли еще какие-либо таблицы, не участвующие в модификации, но имеющие простые IDX-файлы и НЕ структурные CDX-файлы. Не структурный CDX - это такой CDX имя которого отличается от имени файла DBF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 17:43 |
|
||
|
Транзакции в FoxPro, локальный индекс
|
|||
|---|---|---|---|
|
#18+
Большое спасибо Владимир! Я не подумала, что транзакция заранее "не знает", какие таблицы я буду модифицировать, и сделает "снимок" всех таблиц вообще. Хотя бы в одной Data session? По крайней мере, теперь есть где искать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 14:32 |
|
||
|
|

start [/forum/topic.php?fid=41&gotonew=1&tid=1590786]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
173ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 266ms |
| total: | 505ms |

| 0 / 0 |
