On-line: Alex_Cher, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 15
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 19.09.06 16:17. Заголовок: ADS: грабли с ROLLBACK TRANSACTION, если не делать везде dbSkip(0) !!!


hi all.
Не знаю, выплывало ли "это" здесь или нет. Извините, если повтор.

Я тут обнаружил (проведя в поисках "щасья" почти 12 часов :-)), что после КАЖДОЙ команды записи в поля таблиц, проводимой ВНУТРИ ТРАНЗАКЦИИ, надо ОБЯЗАТЕЛЬНО делать DBSKIP(0) или DBGOTO( RECNO() ), иначе при откате транзакции нас ждёт "чудо": "грязные" значения в НЕКОТОРЫХ таблицах останутся ***ВИДИМЫМИ*** после отката транзакции.

И произойдёт это в тех таблицах, для которых соблюдаются следующие условия:
1) в рамках текущей транзакции была проведена запись в какие-либо поля
2) после записи в эти поля указатель НЕ сдвигался с изменённой строки и НЕ была выполнена команда сброса кеша на сервак в виде dbSkip(0) или dbGoto( recNo() )
3) командой SELECT была выбрана какая-либо **ДРУГАЯ** АДС-таблица (неважно, делались ли изменения в этой другой таблице или нет).

в тех таблицах, в которых какие-то поля изменились, но НЕ было сделано dbSkip(0), "грязные" значения в полях останутся ***ВИДИМЫМИ*** после отката транзакции.
Эта "приятная фишечка" проверена на АДС 6.11 для нетвари и на АДС 8.* для Win2000 (TRIAL).
Коннект в обоих случаях шёл по протоколу IPX (clipper 5.2e)

Всем желающим предлагаю провести на своих АДСах следующий тест:

1. Создайте три таблицы:
TEST0.DBF с полем FLD1 C 1
TEST1.DBF с полями FLD1 C 8, FLD2 N 12 2, AXS_TPS C 1
TEST2.DBF с полями FLD1 C 8, FLD2 N 12 2, AXS_TPS C 1


2. Откройте таблицу TEST2 в любом dbf-едиторе

3. Добавьте в таблицу TEST2 одну строку, НЕ заполняя поля данными.

4. Выполните приведенный ниже код:

SET EXCL OFF
USE TEST0 VIA "DBFCDXAX" SHARED NEW // только для вызова AX_AXSLOCKING(.F.)
AX_AXSLOCKING(.F.) // чтобы видеть таблицы в других окнах с исп-ем RDD # 'DBFCDXAX'
USE TEST1 VIA "DBFCDXAX" SHARED NEW
USE TEST2 VIA "DBFCDXAX" SHARED NEW

SELE TEST2
AX_RLOCK(RECN())

SELE TEST1
AX_RLOCK(RECN())

AX_TRANSACTION(1) // ........................... B E G I N T R A N S A C T I O N .........................

SELE TEST2
REPL FLD1 WITH TIME(),FLD2 WITH SECONDS()
*** НАМЕРЕННО закомментированно: dbGoto( recNo() ) или dbSkip(0)

SELE TEST1 // обязательно выбрать перед rollback'ом другую область!

AX_TRANSACTION(3) // ........................... R O L L B A C K T R A N S A C T I O N ......................
QUIT

5. Освежите экран в dbf-едиторе (там был открыт файл TEST2) и полюбуйтесь результатом.
... Или у Вас всё вышло хорошо и системного времени в поле FLD1 не осталось ?

ЗЫ. Линковал вот с этими файлами:
dbfaxs.lib 279507 12.09.2003 05:20
axsbcomm.lib 29785 12.09.2003 07:00
dbfcdxax.obj 792 30.03.1998 05:20


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 21 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 92
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 19.09.06 16:56. Заголовок: Re:


нету тут АДС-ников кроме тебя и меня) да и я - бывший) транзакции один ты юзаешь, остальным - насрать)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 19.09.06 17:23. Заголовок: Re:


Ну тада ты попробуй на досуге... :-) Уж очень хотца убедиться, что это не у меня одного такое происходит...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 282
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.09.06 22:33. Заголовок: Re:


Нет у меня сейчас под рукой живого Ads, чтобы посмотреть
Но имхо так с ads работать нельзя
Установить AX_AXSLOCKING(.F.) и после этого еще желать чтобы работали C/S средства нелепо
Не будут они работать и не должны
И этот режим лучше вообще НИКОГДА не использовать, тогда уж Ads не нужен, теряются все его преимущества
Попробуй тест без AX_AXSLOCKING(.F.)


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 17
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 20.09.06 14:23. Заголовок: Re:


AX_AXSLOCKING(.F.) я поставил только потому, что у меня ASC.EXE почему-то не может открыть .dbf-ники via "DBFCDXAX" на машине, где установлен ADS for Win (это дома). На работе же я делал этот тест БЕЗ вызова этой ф-ции (там novell и ADS 6.11), и результат -- тот же.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 18
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 20.09.06 14:34. Заголовок: Re:


ЗЫ. Только что проверил этот тест ***БЕЗ*** вызова AX_AXSLOCKING(.F.), на машине, где установлен ADS 8.* TRIAL (Win2000): ес-сно, всё с тем же результатом. "Грязные данные" в последней строке всех алиасов, кроме ТЕКУЩЕГО (который выбран непосредственно перед dbUnlockAll или quit'ом), ***ОСТАЮТСЯ*** видимыми после отката транзакции.

Выход, конечно, есть, и очень простой: вместо ax_Transaction(3) написать функцию-обёртку, в которой перед вызовом ax_Transaction(3) делать "опрос" всех алиасов и в каждом из них, если у него RDDNAME()=='DBFCDXAX', делать dbGoto( recNo() ).
Ну и не забыть всадить вызов этой обёртку в ErrorSys, чтобы при всяких аварийных clipper-вывалах откат TRN выполнянлся бы по-человечьи, а не по "штатному" АДС-порядку.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 194
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.09.06 14:54. Заголовок: Re:


Я краем уха слышал, что Clippe- клиент не поддерживается в 8 версии ADS.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 368
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.09.06 16:28. Заголовок: Re:


Григорьев Владимир пишет:

 цитата:
Я краем уха слышал, что Clippe- клиент не поддерживается в 8 версии ADS.


Вроде с 7 клиентом должно работать и потом заломанной версии или регистрилки к 8 ADS пока
не придумали

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 19
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 20.09.06 16:42. Заголовок: Re:


Clipper RDD 7.1 выставлен к скачиванию для АДС 8.* на сайте ES. И цепляется он к нему нормально, без всяких траблов.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 20
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 20.09.06 16:55. Заголовок: Re:


ЗЫ. Даже если бы для АДС 8.* клиппер-клиент уже не работал бы, всё равно вопросик/проблемка остаётся: ведь этот эффект проявляется и на АДС 6.11 (для Netware - точно).
Имхо, какая-то ошибка сидит в том коде, которым АДС подменивает dbUnlock() и dbUnlockAll() -- в той ветке, которая отрабатывает при ОТКАТЕ транзакции.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 283
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.09.06 08:52. Заголовок: Re:


p519446 пишет:

 цитата:
Выход, конечно, есть, и очень простой: вместо ax_Transaction(3) написать функцию-обёртку, в которой перед вызовом ax_Transaction(3) делать "опрос" всех алиасов и в каждом из них, если у него RDDNAME()=='DBFCDXAX', делать dbGoto( recNo() ).



Все намного проще. См в ch - файле команды begin transaction итд
Перед вызовом ax_Transaction там выдается dbCommitAll()
Транзакцию нельзя завершать если клиент не все передал на сервер
dbGoto( recNo() ) выдает тот же коммит


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 21
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 21.09.06 11:19. Заголовок: Re:


Хм... да, ты прав. Я вообще этот файл никогда не смотрел, всё делаю через функции и не подозревал, что команды begin/commit/rollback на самом деле не простые псевдовызовы этих же ф-ций, а составные инструкции.
Жаль только, что в доке они не указали про эту "фишечку"...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 93
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 21.09.06 11:42. Заголовок: Re:


p519446 пишет:

 цитата:
что команды begin/commit/rollback на самом деле не простые псевдовызовы этих же ф-ций, а составные инструкции.
Жаль только, что в доке они не указали про эту "фишечку"...



я тебе 3 года назад говорил - загляни в std.ch - увидишь много интересного. ты сказал, шо тебе это нах не нада)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 22
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 21.09.06 12:04. Заголовок: Re:


2suv: 3 года назад у меня времени не хватало в туалет по малой нужде сбегать, не то что в стд.аш глазеть (сначала индексы валились почти каждый день, потом на сикс переходил с грохотом, потом на АДС с не меньшим гимором).
ЗЫ. А причём тут стд.аш ? в этом конкретном случае надо было пялиться совсем в другое место -- в dbfcdxax.ch! :-)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 95
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 25.09.06 16:32. Заголовок: Re:


ну при том, чтобы прочухать сам механизм препроцессора. там наиболее разнообразно, имхо, среди всех CH, представлены фичи препроцессора

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 377
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.09.06 18:27. Заголовок: Re:


если кому интерестно 23.09 этого года вышел Advantage Database Server v8.00.0.11 for Виндец ;)
гена к этому делу есть

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 23
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 27.09.06 00:05. Заголовок: Re:


Чрезвычайно интересно!! Буду ОЧЕНЬ признателен и жду по адресу: p519446 <сабацька> yandex.ru
ЗЫ. А для новелла такого (8.x) же нет ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 385
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.09.06 07:57. Заголовок: Re:


p519446 пишет:

 цитата:
p519446 <сабацька> yandex.ru


ушло
p519446 пишет:

 цитата:
А для новелла такого (8.x) же нет ?


нет

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 290
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.06 11:37. Заголовок: Re:


Можно и мне адрес ?

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 27.09.06 14:19. Заголовок: Re:


Dima Dima пишет:


 цитата:
если кому интерестно 23.09 этого года вышел Advantage Database Server v8.00.0.11 for Виндец ;)
гена к этому делу есть




И мне пожалуйста на Leo@zt.aval.ua

Спасибо: 0 
Цитата Ответить



Пост N: 43
Зарегистрирован: 30.05.05
ссылка на сообщение  Отправлено: 27.09.06 14:24. Заголовок: Re:


DimaDima пишет:

 цитата:
если кому интерестно 23.09 этого года вышел Advantage Database Server v8.00.0.11 for Виндец ;)
гена к этому делу есть


мне интересно! хочу полукать! скинь пожалуйста на
KhromovSergey@gmail.com
или ткни где можно глянуть!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 21 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 32
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет