Транзакции в InterBase

Раздел форума: 

Аватар пользователя admin

Автор темы: 

Michael
Добрый день!

Пару месяцев назад начал разрабатывать приложение для Interbase БД, используя компонеты IBX для Delphi 5.

При проработке сетевого варианта возникла проблема, касающаяся транзакций.

Например: к одной таблице обращаются 2 пользователя. Транзакция, которую использует таблица имеет установку AutoCommit. Тем неменее если скажем первый пользователь модифицировал запись, то второй пользователь пытаясь изменить эту же запись либо виснет; либо, если первый завершил транзакцию по Commit - второй получает deadlock...

Буду рад, если кто-нибудь откликнется хотя-бы с намеком на решение этой проблемы. Программа предполагает работу двух-трех пользователей в небольшой локальной сети.

С уважением, Михаил.

Аватар пользователя piligrim
Не совсем ясно, в какой системе вы программируете. Если это Дельфи, то такое возможно при использовании компонента TIBTable. Конечно, вы вольны использовать любую методику, но IB это сервер. Его основными инструментами являются запросы, обрамлённые в транзакции, и хранимые процедуры. Использовать табличный компонент как раз такими сложностями и эфектами чреевато. При этом вы намеренно отказываетесь от преимуществ сервера, организуя работу его – как файл – сервера. Т.е. с блокировками записей «именем революции» и бессмысленной перекачкой данных. На большик таблицах и при удалённом доступе вас ждёт в этом случае фиаско. Хотя IB даже через этот компонент обрамляет всё через транзакции, но неожиданности будут. Самый радикальный способ – использование TIBQuery. Я написал для своего предприятия что-то вроде корпоративной базы данных, к которой с разными задачами, подключаются 8 разных АРМ (12 рабочих мест). При этом работает в on_line, система приёма платежей, одно рабочее место которой работает через модем. В этом режиме всё это работает уже больше года и я только однажды встретил любопытный случай сродни шайтанским выходкам.

Пробуйте и пишите burv@tut.by

Аватар пользователя Артём
Подскажите, пожалуйста как восстановить

повреждённую базу данных. База писалась с использованием InterBase 6.0