|
|
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
karly™ Случаи, когда требуется разделение доступа на программном уровне, в жизни случаются крайне редко. я тоже ЗА!!! но видел такое - склад, человек берет товар по списку в конторе, и рядом другой тоже берет товат... если определенного товара есть единиц, и первый попросил , а второй .. обе накладные только формируются.. то надо в принципе отследить.. хотя правильно нефиг в конторе брать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 12:24 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
авторя тоже ЗА!!! но видел такое - склад, человек берет товар по списку в конторе, и рядом другой тоже берет товат... если определенного товара есть единиц, и первый попросил , а второй .. обе накладные только формируются.. то надо в принципе отследить.. Эта ситуация может быть, когда оперативный учет подменяют бухгалтерским. Т.е. продукт уже есть, а документы по БУ еще не прошли. Здесь тоже вопрос не к программисту... ничто не слишком! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 12:46 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Akiно видел такое - склад, человек берет товар по списку в конторе, и рядом другой тоже берет товат... если определенного товара есть единиц, и первый попросил , а второй .. обе накладные только формируются.. то надо в принципе отследить.. А если товара на складе полно, его покупают выписывают одновременно десять человек? Им что, в очередь стоять? Это однозадачная система получается. Правильно - проверять остатки в момент сохранения накладной. Т.е. открыли транзакцию, проверили остатки, если все хорошо - сохранили накладную и транзакцию закрыли. Если же чего-то не хватает - транзакцию откатили, и сообщили об этом пользователю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 13:07 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
karly™ Правильно - проверять остатки в момент сохранения накладной. Т.е. открыли транзакцию, проверили остатки, если все хорошо - сохранили накладную и транзакцию закрыли. Если же чего-то не хватает - транзакцию откатили, и сообщили об этом пользователю. Именно так, но при чтении не забыли оставить блокировку на чтение, иначе она сама снимется, даже если транзакция открыта. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 13:11 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
космонахт авторКакого ХХХХХ пропали мои данные!!!???? Только что внес и они соми собой заменились!" А когда есть очередь редоктирования с Историей редоктирования то тогда я думаю юзер уже будет звонить не мне а тому кто после него изменил. Если оператор имеет доступ к документу, то он отвечает за весь документ, а не отдельные его атрибуты. И, если он сохранил документ, то с него и спрос. Неужели где-то на практике встечается ситуация, когда, например, в платежке одна девушка-оператор набивает только получателя, другая плательщика, третья дату, еще одна номер, следующая сумму и т.д....? При такой ситуации что-то в менеджменте надо править... ничто не слишком! Вносить изменения в менеджмент СВОЕГО предприятия это дело клиента. Программа должна работать независимо от степени организации прользователя и защишать данные от неправильных действий оператора. Всё остальное от лукавого... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 14:04 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
авторВносить изменения в менеджмент СВОЕГО предприятия это дело клиента. Программа должна работать независимо от степени организации прользователя и защишать данные от неправильных действий оператора. Всё остальное от лукавого... Программа как раз напрямую зависит от указанного выше. И дело программиста объяснить заказчику, когда он требует запрограммировать бред, в чем этот бред заключается. Но это тема не этого топика. ничто не слишком! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 14:23 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Возьмем таблицу, допустим, "Сотрудники" Приходит начальник отдела "кадров", кричит: почему "Попкин" в базе как "Пупкин"? 1-я сессия 12:00 кадровик1 начал редактировать запись ID=101 без блокировки строки. Исправляет ошибочную Фам "Пупкин" на "Попкин". 12:05 кадровик1 коммитит транзакцию. Во 2-ой сессии новые данные не видны. В 2-я сессия 12:01 кадровик2 услышал краем уха начал редактировать ту же запись ID=101 без блокировки строки -заметил ту же опечатку в Фам, меняет "Пупкин" на "Попкин".. 12:06 кадровик2 Понял что не надо это делать, откатывает транзакцию. "Попкин" в базе снова как "Пупкин". Ведь в его сессии не видна 1-я сессия космонахтЕсли оператор имеет доступ к документу, то он отвечает за весь документ, а не отдельные его атрибуты. И, если он сохранил документ, то с него и спрос. ------------------------------------------------------- Сразу оговорюсь: Ситуация надуманная , но самый простой выход заблокировать строку с ID=101 в 1-ой сессии и сказать кадровику2, что запись уже редактируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 15:20 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov Сразу оговорюсь: Ситуация надуманная , но самый простой выход заблокировать строку с ID=101 в 1-ой сессии и сказать кадровику2, что запись уже редактируется. Ага... Первый кадровик открыл транзакцию и отвлекся на телефонный звонок, а потом пошел кушать (транзакция висит.). Кто-то запустил генерацию отчета с использованием кадрового состава и запрос наткнулся на заблокированную запись и тоже встал, и.т.д. Короче, через 30 минут стояли все.. Сам такую картину наблюдал при вовлечении в транзакцию интерфейс с пользователем. Вам такое надо? С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 15:39 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov 12:06 кадровик2 Понял что не надо это делать, откатывает транзакцию. "Попкин" в базе снова как "Пупкин". Ведь в его сессии не видна 1-я сессия У тебя перепутаны понятия транзакции и буферизации. Открывать транзакцию в начале редактирования не стоит. А вот если производить изменения в буфере, и сбросить буфер при отказе от редактирования - то в базе останется "Попкин". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 15:44 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
авторВозьмем таблицу, допустим, "Сотрудники" Приходит начальник отдела "кадров", кричит: почему "Попкин" в базе как "Пупкин"? 1-я сессия 12:00 кадровик1 начал редактировать запись ID=101 без блокировки строки. Исправляет ошибочную Фам "Пупкин" на "Попкин". 12:05 кадровик1 коммитит транзакцию. Во 2-ой сессии новые данные не видны. В 2-я сессия 12:01 кадровик2 услышал краем уха начал редактировать ту же запись ID=101 без блокировки строки -заметил ту же опечатку в Фам, меняет "Пупкин" на "Попкин".. 12:06 кадровик2 Понял что не надо это делать, откатывает транзакцию. "Попкин" в базе снова как "Пупкин". Ведь в его сессии не видна 1-я сессия космонахт Если оператор имеет доступ к документу, то он отвечает за весь документ, а не отдельные его атрибуты. И, если он сохранил документ, то с него и спрос. ------------------------------------------------------- Сразу оговорюсь: Ситуация надуманная, но самый простой выход заблокировать строку с ID=101 в 1-ой сессии и сказать кадровику2, что запись уже редактируется. Ситуация действительно надуманная , но ничего блокировать не надо. 1-я сессия 1. 12:00 кадровик1 начал редактировать запись ID=101 без блокировки строки. Исправляет ошибочную Фам "Пупкин" на "Попкин". 2.12:05 кадровик1 нажимает кнопку "сохранить" . 2а.В этот момент программа проверяет, были ли изменены данные во время редактирования. Если были, то пользователю об этом сообщается, а лучше и показываются измененные данные, и он принимает решение о сохранении). Транзакция очень короткая в момент сохранения. В базе Попкин. Во 2-ой сессии новые данные не видны.(это как запрограммировать...) 2-я сессия 3. 12:01 кадровик2 услышал краем уха начал редактировать ту же запись ID=101 без блокировки строки -заметил ту же опечатку в Фам, меняет "Пупкин" на "Попкин".. 4.12:06 кадровик2 Понял что не надо это делать и просто нажимает на кнопку "Выйти" "Попкин" в базе как "Попкин". Все ОК. Или возможен вариант, когда в 12:06 кадровик2 ничего краем уха не слышал. Он нажимает кнопку "сохранить" и мы возвращаемся в п.2а. Все ОК. ничто не слишком! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 15:47 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
karly™У тебя перепутаны понятия транзакции и буферизации. Открывать транзакцию в начале редактирования не стоит. А вот если производить изменения в буфере, и сбросить буфер при отказе от редактирования - то в базе останется "Попкин" Не акцентировал на этом внимания. Акцент на фразе Ситуация надуманная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 16:06 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
2 Aleksey-K наверное немножко глупый вопрос, но очень хочу выяснить. Я пользуюсь CAD-ом. Его использование, т.е. создания, изменение инфы и закрытие - транзакция?? И еще установки буферизации(sqlsetprop) влияют на CAD? 2 космонахт Это если есть отдельно кнопки Выход и Сайв. А при общении с юзерами многие требуют чтоб Была одна кнопка Save&Exit. Тогда как быть в этом случае?? Тут явно без блокировки не обойтись или же ставить таймер который бы подовал запросы на обновления с сервака каждую минуту, но это ж глупо :-)). Или есть другие соображения?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2006, 20:53 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
НедоходящийА при общении с юзерами многие требуют чтоб Была одна кнопка Save&Exit Чем мешает кнопка "Выход" (или "Отмена")? Влом нажать? Повесь на нее .Cancel=.T. Как они хотят отменять свои действия? Ловить крестик? (Уже спортивный интерес...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 00:40 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Недоходящий2 Aleksey-K наверное немножко глупый вопрос, но очень хочу выяснить. Я пользуюсь CAD-ом. Его использование, т.е. создания, изменение инфы и закрытие - транзакция?? И еще установки буферизации(sqlsetprop) влияют на CAD? Я использую в своей практике не CAD, а только SQL pass-through (PH). А в PH я сам определяю явную транзакцию, когда мне это требуется. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 07:11 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Aleksey-KПервый кадровик открыл транзакцию и отвлекся на телефонный звонок, а потом пошел кушать (транзакция висит.). На абсурд-абсурд :-) Аналогия: Пошел кадровик в туалет, снял штаны, присел - тут звонок. Не одевая штаны побежал отвечать на звонок. А потом пошел кушать (штаны висят.) :=-))) Шутка... Все это описывается в инструкции пользователя. Открыл на редактирование- редактируй. Ушел на обед - Закрой приложение. Пользователь должен работать с приложением очень строго. Водитель машины при трогании с места сначала выключает сцепление, потом вкл. скорость, потом вкл.сцепление. При этом не забывает посматривать в зеркало заднего вида. Если будет по другому - смерть... И никто не предлагал бокировать чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 12:19 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov...Все это описывается в инструкции пользователя. Открыл на редактирование - редактируй. Ушел на обед - Закрой приложение. Пользователь должен работать с приложением очень строго...Работая на предыдущей работе, у нас этого никто из пользователей не соблюдал. И сейчас знаю, несоблюдают. При сообщении этого безобразия руководству, мер никаких не принимается. Так что, мое личное мнение: кто последний исправил информацию, тот и прав. А это уж они сами между собой пусть разбираются, кто д.б. правильно и своевременно исправить. Между прочим сразу у них порядок организовался в распределении кто и что должен исправлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 12:33 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov И никто не предлагал бокировать чтение. А при чем тут чтение? Вы же блокировали запись с exclusive или update ? С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 12:35 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что данная дискуссия несколько вышла за пределы начальной темы. Вопрос: "Что должна контролировать программа и за что отвечает пользователь?" Вчера весь вечер возился со следующей проблемой: имеется некий FORM с кнопкой "ВЫХОД". При выходе по нажатии ESC - всё работает Ок. CLICK - ошибка. Вопрос: Предпринимаемые действия: а) Искать и исправить ошибку б) Написать инструкцию с запрещением выхода из данной формы с CLICK-ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 14:57 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Может приведете текст ошибки и, за одно, код метода Click() кнопки "OK" С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 15:17 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Aleksey-KМожет приведете текст ошибки и, за одно, код метода Click() кнопки "OK" С уважением, Алексей Ошибка уже исправлена, да и вопрос не в этом. Вопрос: Должна ли программа иметь, говоря техническим языком, "защиту от дурака" или нет? Должно ли приложение быть рассчитана на "среднего служащего" или на "компьютерое поколение"? И насколько нормальный человек предрасположен менять свои привычки работы (пусть даже и порочные) в угоду компьютерной программе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 15:38 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
burgosрассчитана на "среднего служащего" Не беру в расчет базы-"хранилища", говорю о "живых", "расчетных" приложениях. Практика показывает, что необходим контроль при ВВОДЕ, иначе будет бред при обработке данных. Там где сделано так, для обслуживания приложения необходимо N спецов, если конроля нет - требуется 3*N спецов. Нормальный человек предрасположен менять свои привычки работы (пусть даже и порочные) в угоду компьютерной программе. Любое нормальное приложение упрощает работу, и нормальный человек это понимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 15:50 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Согласен с Alex_Ustinov - контроль нужен. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 16:13 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
2 all Я думаю что защита от дурака нужна обязательно. Юзеры там бухгалтеры или менеджеры, есть такие которые не хотят забивать себе голову в каком порядке куда жать, и поэтому надо предусматривать и эти варианты при построении программы. 2 Alex_Ustinov 1) Вот хотят так и все 2 в 1. Поэтому и поднял эту тему как делать блокировку с скюл. Я знаю про св-во кенскл. Хочу уточнить, это св-во исполняет метод клик при нажатии на ескейп? 2) Согласен контроль нужен обязательно. 2 Aleksey-K А можно статейку по использованию PH? 2 All Я вот тут поразмыслил над словами ВладимирМ ">> разные операторы меняют разную информацию (один адрес, другой контактный телефон), то зачем же блокировать запись. Пусть меняют. Нет причны для конфликта. Опять никаких проблем." Так вот если пишеться история то блокировки на самом деле не надо. НО,вот на редоктировании справочников я думаю что без блокировки не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 01:06 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
НедоходящийХочу уточнить, это св-во исполняет метод клик при нажатии на ескейп? Да, это же легко проверить, можно не уточнять. НедоходящийЮзеры там бухгалтеры или менеджеры, есть такие которые не хотят забивать себе голову в каком порядке куда жать Вот в том то и дело, что для них приложение - инструмент. Берешь в руки плоскогубцы, кусаешь гвоздь и не задумываешся, выдержат они нагрузку или нет. Бывает и ломаются. авторНО,вот на редоктировании справочников я думаю что без блокировки не обойтись. Это я и имел ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 01:50 |
|
||
|
Одновременное редактирование строки на SQL
|
|||
|---|---|---|---|
|
#18+
Hi All! Попробуй сразу всем ответить... 2 burgos > Как вы сами отнеслись бы к следующей ситуации: вы редактируете текст > (например один из модулей вашей программы) и при попытке его сохранения > система выдаёт вам сообщение, что вы ранее этот самый модуль был изменён > другим пользователем и изменения, внесённые вами, будут проигнорированы > (естественно по системным соображениям) Ты возможно удивишься, но для C# проекта мы используем Subversion - систему управления конкурирующими версиями. И я действительно могу править тот-же модуль, который правят в это время другие разработчики - и мне это УДОБНО - а вот вариант предлагаемый системой Source Safe - мне НЕ УДОБЕН - поскольку там только ОДИН человек может в один момент времени править один модуль - и пока он его не "освободит" - все остальные ждут :( При этом никак не принимается во внимание, что в модуле может быть 50 методов, и при этом разные люди будут править разные часть модуля. При сохранении (реально это не сохранение файла, а Commit - т.е. перенос моего "рабочего" файла в общий репозиторий - ну это довольно близкая аналогия с фоксовым буфером и его "сбросом" в базовые таблицы) действительно идёт сообщение о "конфликте" - и тут-же я имею возможность этот конфликт разрешить - при этом я совсем не обязан "терять" свои изменения! я могу либо полностью переписать имеющиеся данные своими (что конечно жестоко по отношению к другим), либо провести объединение - более того система сама предложит наиболее корректный вариант "слияния" моих изменений с чужими! Так что тут ты сильно заблуждаешься, если считаешь что без блокировки никак не обойтись. Насчёт защиты от дурака полностью согласен! но как же ты победишь самую "дурацкую" ситуацию - когда пользователь начал чего-то править, а потом бросил всё и пошёл скажем обедать? Вот если бы без блокировки - то и проблемы нету. 2 Alex_Ustinov Твоя ситуация не просто "надуманная" - она НЕВОЗМОЖНАЯ - т.к. при "откате" вторым пользователем в базе ничего не изменится - и то что ввёл первый пользователь сохранится. И даже при попытке "сохранения" вторым пользователем своего буфера не произойдёт ничего катастрофического - система обнаружит конфликт совместного изменения и покажет (если конечно не ленится и реализовать это - благо все средства имеются) - текущее значение полей, их новое (или "предлагаемое") значение, и даже старое значение (то которое было видно ДАННОМУ пользователю на момент начала редактирования) - и пользователь сможет сделать осознанный выбор - опять же вовсе не нужно принудительно "отменять" его изменения - может он исправил ещё лучше чем это сделал первый - не только одну буковку в ФИО, но и адрес, возраст, пол и т.п. :) Насчёт "инструкции" - ты видел хоть одного пользователя который прочёл инструкцию? Или ты считаешь что перед большим начальником пройдёт отмазка типа "в инструкции это было описано"? > И никто не предлагал бокировать чтение. Ага - тогда тебе надо срочно читать про consistent reads - ибо для ЧТЕНИЯ тоже иногда нужны блокировки. Конечно в Oracle с этим получше - т.к. он версионник и вместо блокировки способен просто разным клиентам отдавать разные (но главное - согласованные!) данные из одной и той-же таблицы, или того сложнее - из разных таблиц :) Или ты считаешь нормальным, если во время формирования отчёта пройдёт некоторое изменение и половина отчёта покажет данные ДО изменения а вторая половина - после :) 2 Недоходящий Можно и таймер сделать - если задача требует чтобы автоматом "прорисовывались" наиболее свежие данные - хотя в большинстве случаев этого вовсе не требуется - и вполне можно всё решать через отлов конфликтов совместного изменения - во время сохранения буфера. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 03:00 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33778027&tid=1591437]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 562ms |

| 0 / 0 |
