Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Транзакция


Автор: Pakshin A. S. 12.9.2004, 14:21
Итак, есть база данных типа Paradox; есть программа, которая работает с ней; программу запускают несколько пользователей; чтобы не возникало проблем при редактировании базы данных (как я вычитал) надо использовать транзакцию. thumbs-up.gif

Собственно проблема sad.gif :
работаю с базой данных через Table и Query, не создавая никаких алиасов. (с этим проблем нет) biggrin.gif . В книге есть пример использования транзакции через DataBase, но для подключения этого компонента надо сделать предварительно алиас sad.gif sad.gif , который я не хочу делать! exclamation.gif

Как ещё можно организовать этот механизм? qstn.gif И вообще то ли это? qstn.gif hmmm.gif
sample.gif

Автор: Pakshin A. S. 12.9.2004, 14:42
Одну фразу нашел:
Цитата

При использовании реляционного способа доступа к данным с помощью операторов SQL также можно явно управлять транзакциями.

Как? qstn.gif sample.gif

Автор: <Spawn> 12.9.2004, 14:47
Насколько я знаю, Paradox не поддерживает тарнзакции. Да и вообще для файл\клиент-серерных БД Парадокс лучше не использовать. Механихм транзакции можно применять, например, в Interbase(Firebird)

Автор: Pakshin A. S. 12.9.2004, 16:26
Это хорошо само собой, да разбираться и таскать с собой IB нет возможности. sad.gif

А вообще что можно сделать, чтобы не получалось ошибки exclamation.gif , когда два пользователя одновременно пытаются редактировать базу данных? qstn.gif

Автор: Alex 12.9.2004, 23:15
может поможет
Цитата
Локальный общий доступ
...я так понимаю, что LocalShare относится к ситуации, когда другие не-IDAPI приложения могут одновременно иметь доступ к одним и тем же файлам...
Примерно на такие мысли наталкивает поставляемая документация... к сожалению это не так.

LOCALSHARE=False говорит BDE о том, что он должен сам решать при необходимости вопрос о блокировке таблицы/записи в типичных ситуациях, например, когда BDE 'думает' что таблица находится на локальном диске он выключает блокировку для увеличения скорости доступа. К сожалению, логические диски общего пользования в сетях 'p-t-p' программно идентифицируются как локальные с предсказуемо липовыми результатами. Установка LOCALSHARE=True заставляет блокирующий механизм 'включаться' для всех дисков и, следовательно, решает эту проблему.

Автор: Alex 12.9.2004, 23:27
Слушай может я чего то и не понял, но ведь можно использовать DataBase не делая алиаса. Я в свое время делал так
и не создавал ни каких алиасов

Автор: Pakshin A. S. 13.9.2004, 18:41
Спасибо с DataBase! Надо попробовать! biggrin.gif

Автор: Pakshin A. S. 13.9.2004, 19:46
ЗАРАБОТАЛО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! smile.gif smile.gif smile.gif

Автор: Alex 13.9.2004, 20:09
а алгоритмом транзакций не поделишься?

Автор: Pakshin A. S. 14.9.2004, 18:36
biggrin.gif
Код

DataBase1.StartTransaction; // начало транзакции
try
 (*делаем изменения*)
 Table1.Append;
 Table1.FieldByName('Demo').AsDateTime:=Now;
 Table1.Post;
 DataBase1.Commit; // Транзакция выполнена успешно. Подтверждаем изменения
except
 DataBase1.RollBack; // Транзакция не выполнена. Отказываемся от изменений
end;

Эту штуку в цикл можно запихнуть или что-то в этом духе сделать...

Автор: Alex 14.9.2004, 18:48
спасибо

Автор: Pakshin A. S. 14.9.2004, 18:51
Не за что... всегда рад предложить код...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)