Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2008, 23:41   #1
lepricon
 
Регистрация: 09.08.2008
Сообщений: 4
По умолчанию Одновременный доступ

Доброго всем времени суток!

Проблема следующая: использую файрбёд, работаю с базой в сетевом режиме (т.е. файл базы лежит в расшаренной папаке на компе, пользователи с ним работают). Один из пользователей добавляет запись в таблицу. У него эта запись при просмотре видна, у остальных нет. Даже select * from this_table вернет все записи без вновьвведенной. Стоит отключится от БД, затем подключится снова - и запись видна. Почему так происходит? И, соответственно, что нужно сделать, чтобы не происходило?

Спасибо!
lepricon вне форума Ответить с цитированием
Старый 30.11.2008, 23:45   #2
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

запись происходит в одной транцакции
соответственно чтобы запись сохранить надо подтвердить транзакцию (Commit)
что ты и делаешь при отключении от базы...
dron-s вне форума Ответить с цитированием
Старый 01.12.2008, 01:12   #3
lepricon
 
Регистрация: 09.08.2008
Сообщений: 4
По умолчанию

В том то и дело, что подтверждаю. Перекрутил уже по-всякому.
Даже в пределах одного приложения: есть 2 окошка, в одном имеется возможность вносить изменения в таблицу, в другом только читать из нее. На каждой форме свой компонент TIBTransaction. В первом окне добавляю запись:

TQ.SQL.Add('insert into table бла-бла-бла');
if not TQ.Transaction.InTransaction then
TQ.Transaction.StartTransaction;
TQ.Prepare;
TQ.ExecSQL;
TQ.UnPrepare;
TQ.Transaction.Commit;

TQ - это TIBQuery.
В итоге после селекта в этой форме изменения видны. Открываю другую форму ( в этом же приложении, правда с другим компонентом TIBTransaction на форме) - не видны.
В каком еще месте и какую транзакцию я должен подтвердить?
lepricon вне форума Ответить с цитированием
Старый 02.12.2008, 19:57   #4
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

Хм. Компоненты IB никогда не использовал, может в них косяк какой... Использую FIBPlus, никогда таких проблем не было... Может после подтверждения транзакции, в других наборах данных, на других машинах,вы либо refresh не делаете, либо он криво проходит либо уровень изоляции транзакций как-то косячит.

Я обычно использую FIBNotifyEvent, когда на сервере обновляется таблица( для этого я обычно использую хранимые процедуры), в конце процедуры делаю post_event 'Имя_события'; На стороне клиента, когда это событие перехватывается, набору записи, который тянет инфу из этой таблицы, делаю FullRefresh и всё... Вы вообще после подтверждения транзакции, в другой форме или в другом приложении пробовали IBDataset.Refresh делать?

И вы не правильно работаете с базой, её не надо расшаривать....

Последний раз редактировалось Rik; 03.12.2008 в 18:34.
Rik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одновременный доступ ГОСЕАН Microsoft Office Access 2 08.08.2008 07:41
Доступ к переменным RealSHELS Общие вопросы Delphi 4 15.06.2008 13:14
доступ к файлам ryton Общие вопросы Delphi 13 23.05.2008 14:15
Доступ к строке Баламут Win Api 10 21.01.2008 08:44
доступ в реестр vicvtor Win Api 6 28.11.2006 20:26