Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по Firebird/ interbase Express [D7, IB6.x, Firebird]


Andrey2025 ©   (2010-03-28 23:07:00) 

Уважаемые программеры! Вопрос такой.
Решил протестировать клиентское приложение на технологии
InterBase Express/  delphi 7. На компе стоит сервер firebird 2.0. Запустил параллельно два раза приложение на одном компе. В первом окне произвел транзакцию, данные обновились нормально. Но во втором окне (запущенном параллельно) обновление не идет. Как будто бы ничего и не было. Стоит еще параллельно запустить приложение - стартует с обновлениями, а уже запущенное параллельно - не хочет обновляться (Grid показывает старые данные, как до транзакции).
С уважением, Андрей.


Andrey2025   (2010-03-29 01:05:00) [1]


> with IBTransaction1 do  begin  if InTransaction then    Commit;
>   Params.Clear;  Params.Add('isc_tpb_read_committed');  Params.
> Add('isc_tpb_write'); // или   Params.Add('isc_tpb_read');
>   Params.Add('isc_tpb_rec_version');  Params.Add('isc_tpb_nowait');
>   end;...........IBTransaction1.StartTransaction;

Этот код тоже подходит, спасибо, PEAKTOP ©. Устанавливал параметры вручную. Но иногда думаю, потребуется и программно менять параметры транзакции


Andrey2025   (2010-03-29 00:59:00) [2]

Наконец - то разобрался с изолированностью транзакций. Оба метода подходят. Огромное спасибо всем (Loginov Dmitry ©, dik59), кто откликнулся и наставил на правильный путь.
Андрей.


PEAKTOP   (2010-03-29 00:55:00) [3]


..........
with IBTransaction1 do
 begin
 if InTransaction then
   Commit;
 Params.Clear;
 Params.Add('isc_tpb_read_committed');
 Params.Add('isc_tpb_write'); // или   Params.Add('isc_tpb_read');
 Params.Add('isc_tpb_rec_version');
 Params.Add('isc_tpb_nowait');
 end;
...........
IBTransaction1.StartTransaction;


dik59   (2010-03-29 00:39:00) [4]

> А закрытие/открытия не помогают из-за неправильной настройки компонента IBTransaction. Необходимо указать тип транзакции "Read commited"

Чуть правильнее было бы сказать, что при отсутствии  "Read commited" необходимо еще и переоткрывать саму транзакцию, возможен ведь случай, когда "Read commited" недопустим.


Andrey2025   (2010-03-28 23:56:00) [5]


> refresh и не поможет (в IBX он не для этого сделан).А закрытие/открытия
> не помогают из-за неправильной настройки компонента IBTransaction.
>  Необходимо указать тип транзакции "Read commited"

Скажите пожалуйста, Дмитрий, а поподробнее можно? в инспекторе для IBRansaction подобного не нашел. Где его нужно указать?


Loginov Dmitry   (2010-03-28 23:37:00) [6]


> Компонент IBTable. но ни refresh, ни закрытие/закрытие не
> помогают.


refresh и не поможет (в IBX он не для этого сделан).
А закрытие/открытия не помогают из-за неправильной настройки компонента IBTransaction. Необходимо указать тип транзакции "Read commited"


Andrey2025   (2010-03-28 23:32:00) [7]


> А с какой стати второе приложение должно обновлять грид,
>  откуда ему знать, что кто-то другой внес изменения в базу
> данных? Ему этого знать не нужно. А если очень нужно, то
> можно добавить кнопку "Обновить", при нажатии на которую
> закрывать, а затем сразу открывать набор данных. А  еще
> можно на это дело таймер повесить.


> А с какой стати второе приложение должно обновлять грид,
>  откуда ему знать, что кто-то другой внес изменения в базу
> данных? Ему этого знать не нужно. А если очень нужно, то
> можно добавить кнопку "Обновить", при нажатии на которую
> закрывать, а затем сразу открывать набор данных. А  еще
> можно на это дело таймер повесить.

Обновлял. Компонент IBTable. но ни refresh, ни закрытие/закрытие не помогают. На SQL сервере все без проблем, а тут вот так.


Loginov Dmitry   (2010-03-28 23:27:00) [8]


> Решил протестировать клиентское приложение на технологии
> InterBase Express/  delphi 7. На компе стоит сервер firebird
> 2.0. Запустил параллельно два раза приложение на одном компе.
>  В первом окне произвел транзакцию, данные обновились нормально.
>  Но во втором окне (запущенном параллельно) обновление не
> идет. Как будто бы ничего и не было. Стоит еще параллельно
> запустить приложение - стартует с обновлениями, а уже запущенное
> параллельно - не хочет обновляться (Grid показывает старые
> данные, как до транзакции).


А с какой стати второе приложение должно обновлять грид, откуда ему знать, что кто-то другой внес изменения в базу данных? Ему этого знать не нужно. А если очень нужно, то можно добавить кнопку "Обновить", при нажатии на которую закрывать, а затем сразу открывать набор данных. А  еще можно на это дело таймер повесить.


Наверх

Титульная страница Поиск, карта сайта Написать письмо