|
Вопрос # 640/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Работаю в D7 с базами данных (IB/Firebird) используя стандартные компоненты INTERBASE.
Вопрос: при работе в многопользовательском режиме не видны изменения, внесенные другими пользователями (refresh у TIBTable, close-open у TIBQuery не помогают). Изменения становятся видными только после применения методов Rollback или Commit компонента IBTransaction. Должно быть это все именно так, или я чего то упустил?
 |
Вопрос задал: Ed (статус: 1-ый класс)
Вопрос отправлен: 18 июня 2007, 13:49
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Ed!
Новые записи, внесённые другими пользователями не будут видны в вашей транзакции, пока вы её не завершите. Правда там есть так называемое грязное чтение (Ditry read) и выставляется оно в настройках транзакций.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 июня 2007, 18:52
Оценка за ответ: 2
Комментарий к оценке: у меня только транзакция на чтение, поэтому нет смысла периодически завершать ее для чтения обновленных данных.
|
Ответ #2. Отвечает эксперт: ANBsoft
Здравствуйте, Ed!
Фактически Commit подтверждает внесенные изменения, и до нее другие пользователи не увидят никаких изменений. Dirty read использовать не рекомендуется, так как пользователь может откатить транзакцию, а другие пользователи могут думать что данные есть или изменены.
Я использую следующие параметры TIBTransaction, при которых подтвержденные изменения становятся видны в других транзакциях:
wait
read_committed
rec_version
Для большинства задач этого будет достаточно.
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 19 июня 2007, 09:04
Оценка за ответ: 4
Комментарий к оценке: Ответ немного не в тему (см. уточнение к вопросу) но использование данных параметров привело к тому, чему надо! Как я понял, rec_version позволяет убрать блокировку чтения (можно читать и обновлять данные в многопользовательской среде)
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 21 июня 2007, 19:25; участников в обсуждении: 2.
|
Ed (статус: 1-ый класс), 18 июня 2007, 18:15 [#1]:
Уточняю: Транзакции, проведенные с текущей базой данных другой программой не видны в моей программе до тех пор, пока не применю Rollback или Commit компонента IBTransaction (причем не важно, делал я сам изменения или нет).
|
|
ANBsoft (статус: Студент), 21 июня 2007, 19:25 [#2]:
Интересно, почему ответ не в тему если он помог?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|