Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.09;
Скачать: CL | DM;

Вниз

Обновление записей.   Найти похожие ветки 

 
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("&#206;&#248;&#232;&#225;&#234;&#224; &#226;&#251;&#239;&#238;&#235;&#237;&#229;&#237;&#232;&#255; &#231;&#224;&#239;&#240;&#238;&#241;&#224;");
       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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
11-1197381407
Elec3C
2007-12-11 16:56
2011.01.09
Запись и чтение в/из файл(-а)


15-1285317768
Gudvin
2010-09-24 12:42
2011.01.09
Технология CUDA + Delphi


4-1243760418
Nikfel
2009-05-31 13:00
2011.01.09
Как загрузить файл .res и из него брать ресурсы


6-1233258365
LOLUIII/E
2009-01-29 22:46
2011.01.09
Сокеты вопрос!!!


2-1287143619
Первокурсница
2010-10-15 15:53
2011.01.09
Параметры ADOQuery,обнаружены символы за пределами инструкции SQL