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