Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение БД 2-мя приложениями 
:(
    Опции темы
php5
Дата 26.1.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Есть приложение которое работает с БД  Firebird 2.0  так вот если  одновременно запушены 2 приложения  и  1-е вносит изменение в БД то 2-е это изменение не видит, но стоит только   закрыть 1-е приложение как  2-е приложение эти изменения уже видит . Как решить данную проблему ?  
 

PM MAIL   Вверх
REZiaMIX
Дата 26.1.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Может быть первое приложение не делает commit  ?


--------------------
user posted image
PM MAIL   Вверх
php5
Дата 27.1.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Ну изменения в БД я вношу так :

IBQuery->Close();
IBQuery->SQL->Clear();
IBQuery->SQL->Add(sql);
IBQuery->ExecSQL();

Походу ExecSQL() должно закрывать транзакцию , по поводу кэширования то я его явно ни где не включал . У меня идет такая связка компонентов :
IBDatabase-> DefaultTransaction= IBTransaction
IBQuery-> Database= IBDatabase
Где можно посмотреть не включено ли кэширование ?
PM MAIL   Вверх
Fazil6
Дата 27.1.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: нет
Всего: 60



Цитата(php5 @  27.1.2009,  10:38 Найти цитируемый пост)
Походу ExecSQL() должно закрывать транзакцию

нет. Нужно делать Commit() соответствующей транзакции. Ты ведь можешь делать несколько ExecSQL() и решать когда нужно закомитить изменения должен сам.

PM MAIL   Вверх
php5
Дата 27.1.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Поле того как я вызываю  IBTransaction->Commit();  то у   IBQuery    соединение с базой  закрывается , это можно как то исправить  ?  или нужно делать явно пере подключение  
PM MAIL   Вверх
Fazil6
Дата 27.1.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: нет
Всего: 60



Цитата(php5 @  27.1.2009,  13:32 Найти цитируемый пост)
Поле того как я вызываю  IBTransaction->Commit();  то у   IBQuery    соединение с базой  закрывается , это можно как то исправить  ?  или нужно делать явно пере подключение   

не нужно делать все в одной транзакции. После Commit все DataSet, связанные с транзакцией закрываются. Это совершенно естественное поведение при работе с БД. Возми за правило, что читающие транзакции отдельно, редактирующие - отдельно. Есть еще такой метод CommitRetain, он делает Commit и открывает транзакцию заново (DataSet-s как бы не закрываются), но эту фишку я очень сильно не рекомендую использовать (ту же рекомендацию ты можешь найти и в доках по Firebird/IB) потому как ресурсы сервера она может пожирать с катострофической скоростью и полюбому правильное ее использование предполагает в игоге все равно вызов Commit().
Вообще как правило при работе открывают транзакцию и в ней читают/перечитывают данные. Если надо внести изменения открывают редактирующую транзакцию, редактируют и Commit. После этого если надо обновляют DataSet-ы в читающей(их) транзакции(ях) 

Это сообщение отредактировал(а) Fazil6 - 27.1.2009, 14:32
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.