![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по 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 показывает старые
> данные, как до транзакции).
А с какой стати второе приложение должно обновлять грид, откуда ему знать, что кто-то другой внес изменения в базу данных? Ему этого знать не нужно. А если очень нужно, то можно добавить кнопку "Обновить", при нажатии на которую закрывать, а затем сразу открывать набор данных. А еще можно на это дело таймер повесить.