![]() |
|
|
![]()
|
|
| php5 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Есть приложение которое работает с БД Firebird 2.0 так вот если одновременно запушены 2 приложения и 1-е вносит изменение в БД то 2-е это изменение не видит, но стоит только закрыть 1-е приложение как 2-е приложение эти изменения уже видит . Как решить данную проблему ?
|
|||
|
||||
| REZiaMIX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Может быть первое приложение не делает commit ?
-------------------- ![]() |
|||
|
||||
| php5 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Ну изменения в БД я вношу так :
IBQuery->Close(); IBQuery->SQL->Clear(); IBQuery->SQL->Add(sql); IBQuery->ExecSQL(); Походу ExecSQL() должно закрывать транзакцию , по поводу кэширования то я его явно ни где не включал . У меня идет такая связка компонентов : IBDatabase-> DefaultTransaction= IBTransaction IBQuery-> Database= IBDatabase Где можно посмотреть не включено ли кэширование ? |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
||||
|
||||
| php5 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Поле того как я вызываю IBTransaction->Commit(); то у IBQuery соединение с базой закрывается , это можно как то исправить ? или нужно делать явно пере подключение
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
не нужно делать все в одной транзакции. После Commit все DataSet, связанные с транзакцией закрываются. Это совершенно естественное поведение при работе с БД. Возми за правило, что читающие транзакции отдельно, редактирующие - отдельно. Есть еще такой метод CommitRetain, он делает Commit и открывает транзакцию заново (DataSet-s как бы не закрываются), но эту фишку я очень сильно не рекомендую использовать (ту же рекомендацию ты можешь найти и в доках по Firebird/IB) потому как ресурсы сервера она может пожирать с катострофической скоростью и полюбому правильное ее использование предполагает в игоге все равно вызов Commit(). Вообще как правило при работе открывают транзакцию и в ней читают/перечитывают данные. Если надо внести изменения открывают редактирующую транзакцию, редактируют и Commit. После этого если надо обновляют DataSet-ы в читающей(их) транзакции(ях) Это сообщение отредактировал(а) Fazil6 - 27.1.2009, 14:32 |
|||
|
||||
![]()
|
| Правила форума "C++: Базы данных" | |
|
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Базы данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |