Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 640

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Работаю в D7 с базами данных (IB/Firebird) используя стандартные компоненты INTERBASE.
Вопрос: при работе в многопользовательском режиме не видны изменения, внесенные другими пользователями (refresh у TIBTable, close-open у TIBQuery не помогают). Изменения становятся видными только после применения методов Rollback или Commit компонента IBTransaction. Должно быть это все именно так, или я чего то упустил?

Ed Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Ed (статус: 1-ый класс), 18 июня 2007, 18:15 [#1]:

Уточняю: Транзакции, проведенные с текущей базой данных другой программой не видны в моей программе до тех пор, пока не применю Rollback или Commit компонента IBTransaction (причем не важно, делал я сам изменения или нет).
ANBsoft

ANBsoft (статус: Студент), 21 июня 2007, 19:25 [#2]:

Интересно, почему ответ не в тему если он помог?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:40
Выполнено за 0.02 сек.