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

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

Обновление записей. [D7, Firebird]


Xmen ©   (2010-10-15 13:49:00) 

Привет мастерам!
Год назад сделал прогу с помощью которого делается регистрация приходящих документов по типам и потом печать, отчет, и т.д.
Прога работает нормально но заметил такой глюк. Наверно я  упустил один момент при работе с транзакциями. Я особо не обращал внимания на работу с транзакции.
Насчет  глюка проги. Есть 3 оператора и один сервер. Если один оператор набирает инфу и сохраняет то нормально а если больше одного то что набирает и сохраняет  первый оператор невидный другим пока не закрыт и сново нужно зайти в прогу.
как нужно организовать так чтобы изменения были видны во всех клиентах (Гридах клиент программах)


Xmen   (2010-10-18 15:10:00) [1]

read_committed
rec_version
nowait

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

Спасибо всем.


Юрий Зотов   (2010-10-18 11:38:00) [2]

И не будет вредно почитать про уровень изоляции:

http://www.google.ru/search?q=%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C+%D0%B8%D0%B7%D0%BE%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&rls=com.microsoft:ru:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7GZHZ&redir_esc=&ei=IPm7TKzfJI2dOpfwpfkM


Sergey13   (2010-10-18 11:27:00) [3]

> [10] Xmen   (18.10.10 10:39)
> Просто мне интересно знать может нужно использовать только
> Commit вместо CommitRetaining. Может нужно для чтения один
> а для записи нужно использовать другую транзакцию?

Может справку почитать про различия?


Xmen   (2010-10-18 10:39:00) [4]

>>Охота обсуждать отвлеченные примеры? Мне нет.
Этот пример используется в самой программе
>>И что? Радоваться за другое место?
Особо не надо.
>>Какая разница сколько раз и в скольких местах? Для достижения желаемого достаточно одного раза в нужном месте.
Есть при сохранение записи. Просто мне интересно знать может нужно использовать только Commit вместо CommitRetaining. Может нужно для чтения один а для записи нужно использовать другую транзакцию?


Sergey13   (2010-10-15 17:30:00) [5]

> [8] Xmen   (15.10.10 16:50)
> 1. Это просто пример
Охота обсуждать отвлеченные примеры? Мне нет.

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

> 3. Да в двух местах DMKanc.TrKansel.CommitRetaining; и в один DMKanc.TrKansel.Commit;
Какая разница сколько раз и в скольки местах? Для достижения желаемого достаточно одного раза в нужном месте.


Xmen   (2010-10-15 16:50:00) [6]

1. Это просто пример
2. есть такое, но в другом месте
3. Да в двух местах DMKanc.TrKansel.CommitRetaining; и в один DMKanc.TrKansel.Commit;


Sergey13   (2010-10-15 16:08:00) [7]

> [6] Xmen   (15.10.10 15:53)

1. Зачем при обновлении переписывать текст запроса? Для обновления датасета достаточно сделать DmKanc.qrMain.Close/DmKanc.qrMain.Open.
2. В запросах надо использовать параметры. Тем более с датами.
3. Там где в БД что то записали (на другом компе) тразакция коммитится?


Xmen   (2010-10-15 15:53:00) [8]

У меня для обновления в форме есть кнопка, но это не решает вопрос данные не изменилис при нажатие кнопки.
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


Anatoly Podgoretsky   (2010-10-15 14:46:00) [9]

Что ты для этого сделал?


Anatoly Podgoretsky   (2010-10-15 14:43:00) [10]

> Xmen  (15.10.2010 13:49:00)  [0]

Для этого клиенты должны получить актуальное содержимое. Close/Open


Sergey13   (2010-10-15 14:40:00) [11]

> [2] Xmen   (15.10.10 14:35)

Это НОРМАЛЬНАЯ ситуация. Так и должно быть. Пользователь видит то, что запросил. Причем видит данные НА МОМЕНТ ЗАПРОСА. Если он хочет увидеть СВЕЖИЕ данные, он должен ПОВТОРИТЬ запрос к БД. Т.е. сделать CLOSE/OPEN своему датасету.


Xmen   (2010-10-15 14:35:00) [12]

в общем суть такова:
1й пользователь делает какие-либо изменения
2й пользователь делает какие-либо изменения
итог: оба пользователя видят только те изменения которые делают лично они,
тоесть если работаешь ТОЛЬКО на одном компе с одной копией программы то вроде всё как бы замечательно,но в много пользовательском режиме 1й пользователь не видит что изменил 2й пользователь а 2й пользователь не видит что изменил 1й пользователь до перезапуска
Вопрос как сделать так чтобы оба пользователя видели изменения? (Нашел вопрос в королевстве но ответ не нашел, у меня анологичная ситуация )


Sergey13   (2010-10-15 14:29:00) [13]

Там где вводят - надо коммитить транзакции. Там где читают - переоткрывать наборы данных для того что бы увидеть введенное другими.


Наверх

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