Форум: "Начинающим";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];
ВнизОбновление записей. Найти похожие ветки
← →
Xmen (2010-10-15 13:49) [0]Привет мастерам!
Год назад сделал прогу с помощью которого делается регистрация приходящих документов по типам и потом печать, отчет, и т.д.
Прога работает нормально но заметил такой глюк. Наверно я упустил один момент при работе с транзакциями. Я особо не обращал внимания на работу с транзакции.
Насчет глюка проги. Есть 3 оператора и один сервер. Если один оператор набирает инфу и сохраняет то нормально а если больше одного то что набирает и сохраняет первый оператор невидный другим пока не закрыт и сново нужно зайти в прогу.
как нужно организовать так чтобы изменения были видны во всех клиентах (Гридах клиент программах)
← →
Sergey13 © (2010-10-15 14:29) [1]Там где вводят - надо коммитить транзакции. Там где читают - переоткрывать наборы данных для того что бы увидеть введенное другими.
← →
Xmen (2010-10-15 14:35) [2]в общем суть такова:
1й пользователь делает какие-либо изменения
2й пользователь делает какие-либо изменения
итог: оба пользователя видят только те изменения которые делают лично они,
тоесть если работаешь ТОЛЬКО на одном компе с одной копией программы то вроде всё как бы замечательно,но в много пользовательском режиме 1й пользователь не видит что изменил 2й пользователь а 2й пользователь не видит что изменил 1й пользователь до перезапуска
Вопрос как сделать так чтобы оба пользователя видели изменения? (Нашел вопрос в королевстве но ответ не нашел, у меня анологичная ситуация )
← →
Sergey13 © (2010-10-15 14:40) [3]> [2] Xmen (15.10.10 14:35)
Это НОРМАЛЬНАЯ ситуация. Так и должно быть. Пользователь видит то, что запросил. Причем видит данные НА МОМЕНТ ЗАПРОСА. Если он хочет увидеть СВЕЖИЕ данные, он должен ПОВТОРИТЬ запрос к БД. Т.е. сделать CLOSE/OPEN своему датасету.
← →
Anatoly Podgoretsky © (2010-10-15 14:43) [4]> Xmen (15.10.2010 13:49:00) [0]
Для этого клиенты должны получить актуальное содержимое. Close/Open
← →
Anatoly Podgoretsky © (2010-10-15 14:46) [5]Что ты для этого сделал?
← →
Xmen (2010-10-15 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 © (2010-10-15 16:08) [7]> [6] Xmen (15.10.10 15:53)
1. Зачем при обновлении переписывать текст запроса? Для обновления датасета достаточно сделать DmKanc.qrMain.Close/DmKanc.qrMain.Open.
2. В запросах надо использовать параметры. Тем более с датами.
3. Там где в БД что то записали (на другом компе) тразакция коммитится?
← →
Xmen (2010-10-15 16:50) [8]1. Это просто пример
2. есть такое, но в другом месте
3. Да в двух местах DMKanc.TrKansel.CommitRetaining; и в один DMKanc.TrKansel.Commit;
← →
Sergey13 © (2010-10-15 17:30) [9]> [8] Xmen (15.10.10 16:50)
> 1. Это просто пример
Охота обсуждать отвлеченные примеры? Мне нет.
> 2. есть такое, но в другом месте
И что? Радовться за другое место?
> 3. Да в двух местах DMKanc.TrKansel.CommitRetaining; и в один DMKanc.TrKansel.Commit;
Какая разница сколько раз и в скольки местах? Для достижения желаемого достаточно одного раза в нужном месте.
← →
Xmen (2010-10-18 10:39) [10]>>Охота обсуждать отвлеченные примеры? Мне нет.
Этот пример используется в самой программе
>>И что? Радоваться за другое место?
Особо не надо.
>>Какая разница сколько раз и в скольких местах? Для достижения желаемого достаточно одного раза в нужном месте.
Есть при сохранение записи. Просто мне интересно знать может нужно использовать только Commit вместо CommitRetaining. Может нужно для чтения один а для записи нужно использовать другую транзакцию?
← →
Sergey13 © (2010-10-18 11:27) [11]> [10] Xmen (18.10.10 10:39)
> Просто мне интересно знать может нужно использовать только
> Commit вместо CommitRetaining. Может нужно для чтения один
> а для записи нужно использовать другую транзакцию?
Может справку почитать про различия?
← →
Юрий Зотов © (2010-10-18 11:38) [12]И не будет вредно почитать про уровень изоляции:
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
← →
Xmen (2010-10-18 15:10) [13]read_committed
rec_version
nowait
немножко поправил дело.
Спасибо всем.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c