Конференция "Базы" » Вопрос по Firebird/ interbase Express [D7, IB6.x, Firebird]
 
  • Andrey2025 (28.03.10 23:07) [0]
    Уважаемые программеры! Вопрос такой.
    Решил протестировать клиентское приложение на технологии
    InterBase Express/  delphi 7. На компе стоит сервер firebird 2.0. Запустил параллельно два раза приложение на одном компе. В первом окне произвел транзакцию, данные обновились нормально. Но во втором окне (запущенном параллельно) обновление не идет. Как будто бы ничего и не было. Стоит еще параллельно запустить приложение - стартует с обновлениями, а уже запущенное параллельно - не хочет обновляться (Grid показывает старые данные, как до транзакции).
    С уважением, Андрей.
  • Loginov Dmitry © (28.03.10 23:27) [1]

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


    А с какой стати второе приложение должно обновлять грид, откуда ему знать, что кто-то другой внес изменения в базу данных? Ему этого знать не нужно. А если очень нужно, то можно добавить кнопку "Обновить", при нажатии на которую закрывать, а затем сразу открывать набор данных. А  еще можно на это дело таймер повесить.
  • Andrey2025 (28.03.10 23:32) [2]

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


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

    Обновлял. Компонент IBTable. но ни refresh, ни закрытие/закрытие не помогают. На SQL сервере все без проблем, а тут вот так.
  • Loginov Dmitry © (28.03.10 23:37) [3]

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


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

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

    Скажите пожалуйста, Дмитрий, а поподробнее можно? в инспекторе для IBRansaction подобного не нашел. Где его нужно указать?
  • dik59 (29.03.10 00:39) [5]
    >А закрытие/открытия не помогают из-за неправильной настройки компонента IBTransaction. Необходимо указать тип транзакции "Read commited"

    Чуть правильнее было бы сказать, что при отсутствии  "Read commited" необходимо еще и переоткрывать саму транзакцию, возможен ведь случай, когда "Read commited" недопустим.
  • PEAKTOP © (29.03.10 00:55) [6]

    ..........
    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;

  • Andrey2025 (29.03.10 00:59) [7]
    Наконец - то разобрался с изолированностью транзакций. Оба метода подходят. Огромное спасибо всем (Loginov Dmitry ©, dik59), кто откликнулся и наставил на правильный путь.
    Андрей.
  • Andrey2025 (29.03.10 01:05) [8]

    > 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 ©. Устанавливал параметры вручную. Но иногда думаю, потребуется и программно менять параметры транзакции
 
Конференция "Базы" » Вопрос по Firebird/ interbase Express [D7, IB6.x, Firebird]
Есть новые Нет новых   [134433   +22][b:0][p:0.001]