-
Уважаемые программеры! Вопрос такой. Решил протестировать клиентское приложение на технологии InterBase Express/ delphi 7. На компе стоит сервер firebird 2.0. Запустил параллельно два раза приложение на одном компе. В первом окне произвел транзакцию, данные обновились нормально. Но во втором окне (запущенном параллельно) обновление не идет. Как будто бы ничего и не было. Стоит еще параллельно запустить приложение - стартует с обновлениями, а уже запущенное параллельно - не хочет обновляться (Grid показывает старые данные, как до транзакции). С уважением, Андрей.
-
> Решил протестировать клиентское приложение на технологии > InterBase Express/ delphi 7. На компе стоит сервер firebird > 2.0. Запустил параллельно два раза приложение на одном компе. > В первом окне произвел транзакцию, данные обновились нормально. > Но во втором окне (запущенном параллельно) обновление не > идет. Как будто бы ничего и не было. Стоит еще параллельно > запустить приложение - стартует с обновлениями, а уже запущенное > параллельно - не хочет обновляться (Grid показывает старые > данные, как до транзакции).
А с какой стати второе приложение должно обновлять грид, откуда ему знать, что кто-то другой внес изменения в базу данных? Ему этого знать не нужно. А если очень нужно, то можно добавить кнопку "Обновить", при нажатии на которую закрывать, а затем сразу открывать набор данных. А еще можно на это дело таймер повесить.
-
> А с какой стати второе приложение должно обновлять грид, > откуда ему знать, что кто-то другой внес изменения в базу > данных? Ему этого знать не нужно. А если очень нужно, то > можно добавить кнопку "Обновить", при нажатии на которую > закрывать, а затем сразу открывать набор данных. А еще > можно на это дело таймер повесить.
> А с какой стати второе приложение должно обновлять грид, > откуда ему знать, что кто-то другой внес изменения в базу > данных? Ему этого знать не нужно. А если очень нужно, то > можно добавить кнопку "Обновить", при нажатии на которую > закрывать, а затем сразу открывать набор данных. А еще > можно на это дело таймер повесить.
Обновлял. Компонент IBTable. но ни refresh, ни закрытие/закрытие не помогают. На SQL сервере все без проблем, а тут вот так.
-
> Компонент IBTable. но ни refresh, ни закрытие/закрытие не > помогают.
refresh и не поможет (в IBX он не для этого сделан). А закрытие/открытия не помогают из-за неправильной настройки компонента IBTransaction. Необходимо указать тип транзакции "Read commited"
-
> refresh и не поможет (в IBX он не для этого сделан).А закрытие/открытия > не помогают из-за неправильной настройки компонента IBTransaction. > Необходимо указать тип транзакции "Read commited"
Скажите пожалуйста, Дмитрий, а поподробнее можно? в инспекторе для IBRansaction подобного не нашел. Где его нужно указать?
-
>А закрытие/открытия не помогают из-за неправильной настройки компонента IBTransaction. Необходимо указать тип транзакции "Read commited"
Чуть правильнее было бы сказать, что при отсутствии "Read commited" необходимо еще и переоткрывать саму транзакцию, возможен ведь случай, когда "Read commited" недопустим.
-
..........
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_rec_version');
Params.Add('isc_tpb_nowait');
end;
...........
IBTransaction1.StartTransaction;
-
Наконец - то разобрался с изолированностью транзакций. Оба метода подходят. Огромное спасибо всем (Loginov Dmitry ©, dik59), кто откликнулся и наставил на правильный путь. Андрей.
-
> 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 ©. Устанавливал параметры вручную. Но иногда думаю, потребуется и программно менять параметры транзакции
|