работа TTS из-под Novell Client Win 2000/XP

История вопроса.
Есть у нас программа, написанная на FoxPro 2.5 и VFP6.0. Исторически сложилось, что ПО использует Новелловские транзакции (ДОС - netware.plb, VFP - что-то вроде её аналога, написанную мной на VC++). Из-под ДОС-а всё работает классно, из-под Win95/98 тоже. А вот с клиентом для NT/2k/XP траблы. Если паралелльно программе табличка открыта НА ТОЙ ЖЕ станции чем-то ещё, например, фоксом (нормальная ситуация, например, для отладки), то откат транзакции не происходит. Пару лет назад находил (как мне кажется) правильный клиент+заплатки, чтобы работало, но рецепт был утерян.
От сервера не зависит. На работе проверяю на 3.12, у клиента крутится 5.1 сервер.
Написал такую вот тестовую программу. Вызовы begintran,endtran,aborttran приводят к вызовам функций NWTTSBegintransaction, NWTTSEndtransaction, NWTTSAborttransaction в новельном клиенте.
Пробовал также ставить внутри транзакцинного блока ставить блокировку всей таблицы (фокс при изменении блокирует только изменяющиеся куски файла таблицы) - результат не изменился.
TTS$LOG.ERR - за сегодняшний день только
Friday June 23, 2006 8:30:17 am
Initializing Transaction Tracking System
Если снимал программу, а она в этот момент оказывалась внутри транзакции, то при отключении от сервера писала:
Thursday June 22, 2006 2:30:05 pm
Transaction aborted for station #4 task #8
Есть у нас программа, написанная на FoxPro 2.5 и VFP6.0. Исторически сложилось, что ПО использует Новелловские транзакции (ДОС - netware.plb, VFP - что-то вроде её аналога, написанную мной на VC++). Из-под ДОС-а всё работает классно, из-под Win95/98 тоже. А вот с клиентом для NT/2k/XP траблы. Если паралелльно программе табличка открыта НА ТОЙ ЖЕ станции чем-то ещё, например, фоксом (нормальная ситуация, например, для отладки), то откат транзакции не происходит. Пару лет назад находил (как мне кажется) правильный клиент+заплатки, чтобы работало, но рецепт был утерян.
От сервера не зависит. На работе проверяю на 3.12, у клиента крутится 5.1 сервер.
Написал такую вот тестовую программу. Вызовы begintran,endtran,aborttran приводят к вызовам функций NWTTSBegintransaction, NWTTSEndtransaction, NWTTSAborttransaction в новельном клиенте.
- Код: Выделить всё
for i =1 to 1000
j=begintran()
if j!=0
errhand(-j,"Begintran error",program(),lineno(1))
endif
insert into testtts (testtts_cd,res) values (i,iif(mod(i,2)=0,"Чётное","Нечётное"))
if mod(i,2)=0
j=aborttran()
if j!=0
errhand(-j,"aborttran error",program(),lineno(1))
endif
else &&Должны остаться только нечётные записи
j=endtran()
if j!=0
errhand(-j,"endtran error",program(),lineno(1))
endif
endif
next
Пробовал также ставить внутри транзакцинного блока ставить блокировку всей таблицы (фокс при изменении блокирует только изменяющиеся куски файла таблицы) - результат не изменился.
TTS$LOG.ERR - за сегодняшний день только
Friday June 23, 2006 8:30:17 am
Initializing Transaction Tracking System
Если снимал программу, а она в этот момент оказывалась внутри транзакции, то при отключении от сервера писала:
Thursday June 22, 2006 2:30:05 pm
Transaction aborted for station #4 task #8