Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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("&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
2-1286861156
qpwo111
2010-10-12 09:25
2011.01.09
ScrollBar в гриде


2-1286865049
vegarulez
2010-10-12 10:30
2011.01.09
Как остановить закачку в IdHttp?


2-1287133819
coolon81
2010-10-15 13:10
2011.01.09
Не могу разобраться со связями таблиц


2-1286865219
Den
2010-10-12 10:33
2011.01.09
Как проверить есть ли данные в поле


2-1286992785
Fantomas_RUS
2010-10-13 21:59
2011.01.09
Dll важный вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский