Конференция "Начинающим" » Обновление записей. [D7, Firebird]
 
  • Xmen (15.10.10 13:49) [0]
    Привет мастерам!
    Год назад сделал прогу с помощью которого делается регистрация приходящих документов по типам и потом печать, отчет, и т.д.
    Прога работает нормально но заметил такой глюк. Наверно я  упустил один момент при работе с транзакциями. Я особо не обращал внимания на работу с транзакции.
    Насчет  глюка проги. Есть 3 оператора и один сервер. Если один оператор набирает инфу и сохраняет то нормально а если больше одного то что набирает и сохраняет  первый оператор невидный другим пока не закрыт и сново нужно зайти в прогу.
    как нужно организовать так чтобы изменения были видны во всех клиентах (Гридах клиент программах)
  • Sergey13 © (15.10.10 14:29) [1]
    Там где вводят - надо коммитить транзакции. Там где читают - переоткрывать наборы данных для того что бы увидеть введенное другими.
  • Xmen (15.10.10 14:35) [2]
    в общем суть такова:
    1й пользователь делает какие-либо изменения
    2й пользователь делает какие-либо изменения
    итог: оба пользователя видят только те изменения которые делают лично они,
    тоесть если работаешь ТОЛЬКО на одном компе с одной копией программы то вроде всё как бы замечательно,но в много пользовательском режиме 1й пользователь не видит что изменил 2й пользователь а 2й пользователь не видит что изменил 1й пользователь до перезапуска
    Вопрос как сделать так чтобы оба пользователя видели изменения? (Нашел вопрос в королевстве но ответ не нашел, у меня анологичная ситуация )
  • Sergey13 © (15.10.10 14:40) [3]
    > [2] Xmen   (15.10.10 14:35)

    Это НОРМАЛЬНАЯ ситуация. Так и должно быть. Пользователь видит то, что запросил. Причем видит данные НА МОМЕНТ ЗАПРОСА. Если он хочет увидеть СВЕЖИЕ данные, он должен ПОВТОРИТЬ запрос к БД. Т.е. сделать CLOSE/OPEN своему датасету.
  • Anatoly Podgoretsky © (15.10.10 14:43) [4]
    > Xmen  (15.10.2010 13:49:00)  [0]

    Для этого клиенты должны получить актуальное содержимое. Close/Open
  • Anatoly Podgoretsky © (15.10.10 14:46) [5]
    Что ты для этого сделал?
  • Xmen (15.10.10 15:53) [6]
    У меня для обновления в форме есть кнопка, но это не решает вопрос данные не изменилис при нажатие кнопки.
    if (CheckBox1.Checked) and (CheckBox2.Checked)  then
      begin
       with DmKanc.qrMain do
        begin
         DisableControls;
         if Active then Close;
         Screen.Cursor := crHourGlass;
         SQL.Clear;
         SQL.Add(' SELECT * FROM main');
         SQL.Add(' WHERE Regdate>='''+MaskEdit1.Text+'''');
         SQL.Add(' AND Regdate<='''+MaskEdit2.Text+'''');
         SQL.Add(' AND Regtype='''+val+'''');
         SQL.Add(' AND yil='''+ComboBox1.Text+'''');
         SQL.Add(' ORDER BY Regtype, regnamber');
         try
           Open;
         except
           ShowMessage('Îøèáêà âûïîëíåíèÿ çàïðîñà');
           Screen.Cursor := crDefault;
           exit;
         end;
         EnableControls;
         Screen.Cursor := crDefault;
        end;
    end;
    Что еще нужно сделать для обновления таблицы ДБГрида?
  • Sergey13 © (15.10.10 16:08) [7]
    > [6] Xmen   (15.10.10 15:53)

    1. Зачем при обновлении переписывать текст запроса? Для обновления датасета достаточно сделать DmKanc.qrMain.Close/DmKanc.qrMain.Open.
    2. В запросах надо использовать параметры. Тем более с датами.
    3. Там где в БД что то записали (на другом компе) тразакция коммитится?
  • Xmen (15.10.10 16:50) [8]
    1. Это просто пример
    2. есть такое, но в другом месте
    3. Да в двух местах DMKanc.TrKansel.CommitRetaining; и в один DMKanc.TrKansel.Commit;
  • Sergey13 © (15.10.10 17:30) [9]
    > [8] Xmen   (15.10.10 16:50)
    > 1. Это просто пример
    Охота обсуждать отвлеченные примеры? Мне нет.

    > 2. есть такое, но в другом месте
    И что? Радовться за другое место?

    > 3. Да в двух местах DMKanc.TrKansel.CommitRetaining; и в один DMKanc.TrKansel.Commit;
    Какая разница сколько раз и в скольки местах? Для достижения желаемого достаточно одного раза в нужном месте.
  • Xmen (18.10.10 10:39) [10]
    >>Охота обсуждать отвлеченные примеры? Мне нет.
    Этот пример используется в самой программе
    >>И что? Радоваться за другое место?
    Особо не надо.
    >>Какая разница сколько раз и в скольких местах? Для достижения желаемого достаточно одного раза в нужном месте.
    Есть при сохранение записи. Просто мне интересно знать может нужно использовать только Commit вместо CommitRetaining. Может нужно для чтения один а для записи нужно использовать другую транзакцию?
  • Sergey13 © (18.10.10 11:27) [11]
    > [10] Xmen   (18.10.10 10:39)
    > Просто мне интересно знать может нужно использовать только
    > Commit вместо CommitRetaining. Может нужно для чтения один
    > а для записи нужно использовать другую транзакцию?

    Может справку почитать про различия?
  • Юрий Зотов © (18.10.10 11:38) [12]
  • Xmen (18.10.10 15:10) [13]
    read_committed
    rec_version
    nowait

    немножко поправил дело.

    Спасибо всем.
 
Конференция "Начинающим" » Обновление записей. [D7, Firebird]
Есть новые Нет новых   [134432   +18][b:0][p:0.001]