Поиск:

Ответ в темуСоздание новой темы Создание опроса
> хочу разобраться с буферизацией, ROLLBACK и TABLEREVERT() 
V
    Опции темы
Artiom
Дата 25.8.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 3
Всего: 17



Не совсем понятно когда использовать транзакции, а когда нет.  И как реализуется откат.
Вот тестовый пример из хелпа
Код

OPEN DATABASE (HOME(2) + 'Data\testdata')

SET MULTILOCKS ON      && Required for buffering

USE customer
=CURSORSETPROP("Buffering",5)
? 'The original company field'
LIST FIELDS cust_id, company NEXT 5
REPLACE ALL company WITH "***" && Change field contents

BEGIN TRANSACTION
   =TABLEUPDATE(.T.)
   GO TOP
   ? 'The modified company field'
   LIST FIELDS cust_id, company NEXT 5
   ROLLBACK           && Restore original field contents

=TABLEREVERT(.T.)
GO TOP
? 'The restored company field'
LIST FIELDS cust_id, company NEXT 5

Мне непонятно, зачем здесь прописано =TABLEREVERT(.T.)? разве откат не произошел по ROLLBACK?
Просто мне сейчас надо читать файл построчно и данные из строки писать в таблицы. Но если хоть в одной строке ошибка - надо откатить всю операцию. Поэтому хочу разобраться с буферизацией. 



--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Cashey
Дата 25.8.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



=TABLEREVERT(.T.) в этом примере относится к строке
Код

REPLACE ALL company WITH "***" && Change field contents

а ROLLBACK откатывает только то, что внутри блока BEGIN TRANSACTION ... END TRANSACTION/ROLLBACK, т.е.
Код

   =TABLEUPDATE(.T.)  &&Вот это и было откатано
   GO TOP
   ? 'The modified company field'
   LIST FIELDS cust_id, company NEXT 5


Добавлено @ 11:02 
Цитата(Artiom @  25.8.2006,  11:15 Найти цитируемый пост)
Просто мне сейчас надо читать файл построчно и данные из строки писать в таблицы. Но если хоть в одной строке ошибка - надо откатить всю операцию. Поэтому хочу разобраться с буферизацией.

Теперь постораюсь объяснить принцип. При 5-й буферизации данные, заносимые в таблицу, в эту таблицу не попадают (находятся в буфере) вплоть до выполнения комманды TABLEUPDATE.
Транзакция откатывает ЛЮБЫЕ изменения произошедшие с таблицей внутри блока транзакции.
Таким образом в примере было осуществленно следующие: были внесенны данные и внутри блока транзакции сохранены, а после откатанно сохранение. таким образом продемонстрированно как можно проманипулировать с данными и вернутся к ночальному их значению


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Artiom
Дата 25.8.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 3
Всего: 17



ага, вроде понял. спасибо


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Cashey
Дата 25.8.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



да не за что smile помечай вопрос как решенный smile


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Artiom
Дата 19.9.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 3
Всего: 17



Решил поднять тему, так как появились вопросы

Cashey,  не мог бы ты малость пояснить по ситуациям
1. Когда используют буфферизацию
2. Когда транзакции
и чтения хелпа. я предположил
1. буферизацию использовать надо всегда или почти всегда, если заботишься о целостности данных, правильной работе приложения
2. транзакции использовать если добавляешь в таблицу несколько строк "за раз", изменяешь несколько таблиц одновременно (а следовательно используется 5 буферизация)
Поправь меня пожалуйста если что не так, а то в хочется все по полочкам в голове разложить


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Cashey
Дата 19.9.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



Разновидности буферезации для прикладного программиста заключаются по сути в механизме сохранения данных и отката изменений соответсвенно.
Транзакции целесообразно использовать только при сетевой работе с базами, либо если ты не уверен в корректности своего кода. По возможности лучше избегать не нужных вложенностей транзакции.

Другими словами, если хочешь, что бы изменения сохранялись только после нажатия на кнопку - используй 5-ю буферизацию, если что бы сохранялись автоматически - 3-ю или 1-ю.

Транзакции используются тогда, когда надо откатить все изменения в случае если произошел сбой на этапе выполнения (например пропала сеть)


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Foxpro/Clipper/Dbase"
MoLeX

Запрещается!

1. Публиковать ссылки для чисто рекламных целей.

2. Оффтопить, флеймить, говорить не культурно.

Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему.

Задавайте вопросы правильно - как спросите, так вам и ответят.

Разрешено!

Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил.

Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы.

P.S. Размещение рекламы будет строго наказываться!



Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема »


 




[ Время генерации скрипта: 0.0675 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.