Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlKonst_OneWhite OwlА чем не устраивает клиент-серверный подход? видимо у автора где-то есть грязное чтение из используемых в транзакции таблиц, поэтому и не подходитЭто как это? Маша открыла запись, исправила одно поле, Петя на другой машине открыл эту же запись, увидел Машины исправления, поверх них сделал свои исправления. А потом кто-то из них нажал Save... Не, можно конечно и так жить, но заранее закладываться на чехарду нулевого уровня изоляции это .... я не знаю таких цензурных слов. не так конечно , но может какие-то списки заполняются на формах из данных этих таблиц и тп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 17:53 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlНе, можно конечно и так жить, но заранее закладываться на чехарду нулевого уровня изоляции это .... я не знаю таких цензурных слов. По моему вы подумали за ТС-а много лишнего. Ибо сделано у него все нормально и красиво, без грязных чтений и транзакций в разных соединениях, дальнейшие рассуждения только о том, а нельзя ли сделать еще красивее (/удобнее/практичнее) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 17:57 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlShocker.Pro, сделай лучше это: А потом рассматривай результаты разумеется я получаю Server: Msg 3903, Level 16, State 1, Line 14 The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION. ибо ты пытаешься откатить несуществующую транзакцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 17:59 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White Owlorunbekпричина отказа от транзакций и использований промежуточных таблиц: автор представьте ситуацию: 1. пользователь открывает форму редактирования контактов, открывается транзакция 2. затем открывает в другой дочерней форме совсем другие данные и редактирует их 3. после завершения редактирования переходит к форме редактирования контактов и нажимает кнопку "ОТМЕНА", соответственно выполняется откат транзакции, т.е. получается что изменения в других таблицах тоже отменяется сам пост А чем не устраивает клиент-серверный подход? При открытии формы редактирования, программа открывает транзакцию, выкачивает все нужные данные, закрывает транзакцию. Пользователь редактирует сколько душе угодно. Если в конце была нажата Cancel - просто закрываем форму и все. Если нажали Save - открываем транзакцию, записываем данные, закрываем транзакцию. Все. Минимум блокировок плюс максимальная надежность. Сама задача несколько другая, я просто описал как бы прототип в форме редактирования записи есть несколько гридов, в которых редактируются подчиненные данные основной записи, подобной таблице телефонов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:11 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlKonst_OneWhite OwlА чем не устраивает клиент-серверный подход? видимо у автора где-то есть грязное чтение из используемых в транзакции таблиц, поэтому и не подходитЭто как это? Маша открыла запись, исправила одно поле, Петя на другой машине открыл эту же запись, увидел Машины исправления, поверх них сделал свои исправления. А потом кто-то из них нажал Save... Не, можно конечно и так жить, но заранее закладываться на чехарду нулевого уровня изоляции это .... я не знаю таких цензурных слов. нет, такого нет, в каждой записи есть дополнительное поле, которое указывает на то, что определенный пользователь уже открыл для редактирования, пока значение этого поля не сбросится никто другой не может редактировать запись сброс происходит в двух случаях: 1. завершение редактирования 2. сброс администратором системы поля открытости записи в коде подтверждения изменений есть проверка соответствия поля открытости значению в момент открытия, эти "вещи", в принципе само-собою подразумевающиеся, из-за этого я и не стал про это писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:14 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Shocker.ProWhite OwlShocker.Pro, сделай лучше это: А потом рассматривай результаты разумеется я получаю Server: Msg 3903, Level 16, State 1, Line 14 The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION. ибо ты пытаешься откатить несуществующую транзакцию Замечательно. А теперь расскажи мне какой транзакции принадлежит какой из insert'ов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:18 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
orunbekСама задача несколько другая, я просто описал как бы прототип в форме редактирования записи есть несколько гридов, в которых редактируются подчиненные данные основной записи, подобной таблице телефоновИ что это меняет? Или ты привязываешь гриды напрямую к курсорам? Если да, то срочно отвязывать. Пользователь должен иметь прямой доступ только к массивам в памяти клиентской машины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:21 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro... дальнейшие рассуждения только о том, а нельзя ли сделать еще красивее (/удобнее/практичнее) попали в десятку!!!! этого и я жду в этой теме к примеру White OwlА чем не устраивает клиент-серверный подход? При открытии формы редактирования, программа открывает транзакцию, выкачивает все нужные данные, закрывает транзакцию. Пользователь редактирует сколько душе угодно. Если в конце была нажата Cancel - просто закрываем форму и все. Если нажали Save - открываем транзакцию, записываем данные, закрываем транзакцию. Все. Минимум блокировок плюс максимальная надежность. тоже интересный вариант, но как написал выше, есть еще дополнительные специфичные моменты, из-за которых описанный метод "чуть-чуть" не подходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:22 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlShocker.ProWhite OwlShocker.Pro, сделай лучше это: А потом рассматривай результаты разумеется я получаю Server: Msg 3903, Level 16, State 1, Line 14 The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION. ибо ты пытаешься откатить несуществующую транзакцию Замечательно. А теперь расскажи мне какой транзакции принадлежит какой из insert'ов? Это допрос? первый и последний инсерт выполняются внутри собственных implicit-транзакций (счетчиком мы этого не увидим) второй выполняется в явно открытой транзакции, счетчиком мы увидим 1. И что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:23 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
orunbekнет, такого нет, в каждой записи есть дополнительное поле, которое указывает на то, что определенный пользователь уже открыл для редактирования, пока значение этого поля не сбросится никто другой не может редактировать запись сброс происходит в двух случаях: 1. завершение редактирования 2. сброс администратором системы поля открытости записи в коде подтверждения изменений есть проверка соответствия поля открытости значению в момент открытия, эти "вещи", в принципе само-собою подразумевающиеся, из-за этого я и не стал про это писатьЭто вещь как раз из разряда "как делать не надо". Маша открыла запись и вместе с Админом ушла на обед. В результате никто к записи добраться не может. Чтобы Маша с Петей могли редактировать одну и ту-же логическую запись и при этом свести конфликты к минимуму, достаточно запомнить предыдущее значение записи и перед физическим обновлением убедится что запись по прежнему в том состоянии в каком она была при прочтении. При несовпадении выдать соответсвующее окошко. То есть схема в идеале будет такой: - Открываем окно. Открываем курсоры. Читаем в собственные массивы все данные которые возможно редактировать. Читаешь дату последнего обновления записи. Закрываем курсоры. - Пользователь редактирует все что ему угодно. - Пользователь командует "Сохранить". Читаешь дату последнего обновления записи, если она совпадает с той которую ты прочитал в начале работы - просто сохраняешь все и обновляешь дату. Если не совпадает - выдаешь окно типа "КТО-ТО уже изменил эту запись! Прочитать изменения и вернуться в редактирование, игнорировать чужие изменения или отменить все и закрыть окно?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:32 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlЭто вещь как раз из разряда "как делать не надо". ... - Пользователь командует "Сохранить". Читаешь дату последнего обновления записи, если она совпадает с той которую ты прочитал в начале работы - просто сохраняешь все и обновляешь дату. Если не совпадает - выдаешь окно типа "КТО-ТО уже изменил эту запись! Прочитать изменения и вернуться в редактирование, игнорировать чужие изменения или отменить все и закрыть окно?" И что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше Маша а) бегает по всем пользователям выясняет и синхронизирует свои изменения со всеми другими пользователями б) перезаписывает поверх, затирая работу других пользователей и внося сбои в процесс работы. в) закрывает карточку, открывает заново и долго мучительно вспоминает, что же она редактировала. Какой вариант наименее глупый? Правильный ответ - блокировка карточки. Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет. Для облегчения - права на разблокировку карточки даются нескольким ответственным лицам, чтобы кто-то из них всегда мог быть на месте, а также делается открытие карточки в режиме "только для чтения" если кто-то ее уже редактирует или даже всегда открывать только для чтения, а на редактирования выдывается дополнительной кнопкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:41 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Shocker.Proпервый и последний инсерт выполняются внутри собственных implicit-транзакций (счетчиком мы этого не увидим) второй выполняется в явно открытой транзакции, счетчиком мы увидим 1.Угу. А кто интересно закоммитил последнюю вставку? Я же ее отменять пытался? Я же там явно rollback написал! Какая сволочь последнюю вставку утвердила? Мой хрустальный шар утверждает что у тебя включен AutoCommit. То есть изменения которые ты не предварял командой begin tran ты уже в принципе не сможешь откатить... Замечательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:41 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Shocker.ProИ что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше МашаА дальше Маша смотрит на дополнительный диалог и видит в нем новые текущие значения и изменные ею значения. Shocker.ProПравильный ответ - блокировка карточки. Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет.Проще предусмотреть заранее, чем потом наказывать людей и надеятся что это наказание пойдет впрок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:45 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro[quot White Owl] ... Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет. Для облегчения - права на разблокировку карточки даются нескольким ответственным лицам, чтобы кто-то из них всегда мог быть на месте, а также делается открытие карточки в режиме "только для чтения" если кто-то ее уже редактирует или даже всегда открывать только для чтения, а на редактирования выдывается дополнительной кнопкой. Вы прямо мой метод описываете, в интерфейсе клиента, по умолчанию и стоит кнопка чтения а чтобы изменить необходимо нажать дополнительную кнопочку и потом выбрать команду "Изменить запись", т.е. человек должен 100% уверенным быть, что он хочет изменить запись, т.е. открыть для "монопольного" изменения по поводу "пиз$#лей" понравилось ;))))) Маша это заслужила ;)) А поводу прав, в программе предусмотрена возможность делегирования возможностей "сброса" статуса редактирования P.S. Постепенно "выходят в свет" нюансы системы, про которые в начале темы не писал ;)).... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:47 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlУгу. А кто интересно закоммитил последнюю вставку? Я же ее отменять пытался? Я же там явно rollback написал! Какая сволочь последнюю вставку утвердила? Мой хрустальный шар утверждает что у тебя включен AutoCommit. То есть изменения которые ты не предварял командой begin tran ты уже в принципе не сможешь откатить... Замечательно. И что? Я должен каждый раз явно коммитить любой блин одиночный запрос? Я согласен, чтобы одиночный запрос коммитился сам, на то он и одиночный. И вообще, не представляю себе ситуации, когда нужно откатывать одиночный запрос. Если я его написал, я же предполагаю его выполнять, а не откатывать. А в случае пакета запросов я укажу транзакцию явно. Не вижу сбоя в логике рассуждений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:49 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlShocker.ProИ что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше МашаА дальше Маша смотрит на дополнительный диалог и видит в нем новые текущие значения и изменные ею значения. Shocker.ProПравильный ответ - блокировка карточки. Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет.Проще предусмотреть заранее, чем потом наказывать людей и надеятся что это наказание пойдет впрок. Лучше резервировать, чем применять такой метод, можно даже в паре с вашим методом применять т.е. выгрузить в машину клиента, при этом зарезервировав запись, а потом после завершения сначала проверяем резервацию, если это наш резерв, то подтверждаем изменения, иначе выдаем соответствующее сообщение вроде ADO.NET что-то подобное используется? верно? т.е. связки с сервером базы данных нету? выгружаются данные и потом редактируются, верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:50 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
orunbekВы прямо мой метод описываете, в интерфейсе клиента, по умолчанию и стоит кнопка чтения а чтобы изменить необходимо нажать дополнительную кнопочку ... в программе предусмотрена возможность делегирования возможностей "сброса" статуса редактирования Да потому что к этому приходишь с опытом программирования определенного рода систем. Видимо у нас с вами системы похожего назначения, а Белый Сыч программирует какие-то другие системы. Например для прапорщиков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:51 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White OwlShocker.ProИ что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше МашаА дальше Маша смотрит на дополнительный диалог и видит в нем новые текущие значения и изменные ею значения. Это хорошо при трех-четырех полях на одном уровне. А если это таблица, где могут быть удаленные, добавленые и измененные записи? А если таких таблиц несколько? А если внесенных изменений несолько? А если на форме несколько закладок? Да ты задолбаешься программировать интерфейс сравнения версий, не говоря уж о том, что надо вести полные логи изменений, что тоже не всегда оправдано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 19:56 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Shocker.ProorunbekВы прямо мой метод описываете Да потому что к этому приходишь с опытом программирования определенного рода систем. Есть некоторое отличие - блокировки пишу не в редактируемую таблицу, а в некоторую сводную. Так проще очистить блокировки при аварийном пропадании клиента. Shocker.Pro Например для прапорщиков Надеюсь не слишком погорячился в пылу спора? А то прошу прощения! White Owl - возвращайся! Ты еще не показал пример с ошибкой 111 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2010, 21:06 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Shocker.ProДа потому что к этому приходишь с опытом программирования определенного рода систем. Видимо у нас с вами системы похожего назначения, а Белый Сыч программирует какие-то другие системы. Например для прапорщиков Нет. У меня Маши и Пети обычно сидят на разных континентах. Для меня блокировка любого вида - немедленное растерзание. Намного простительнее потерять часовую работу одного человека чем заблокировать тысячу. Shocker.ProWhite Owl - возвращайся! Ты еще не показал пример с ошибкой 111 И не покажу. Это уже я погорячился слегка. 111-ая возникает при отправке DDL команд которые не любят быть в пакете, операторными скобками оно не лечится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2010, 00:50 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
White Owl, Shocker.Pro Вы как-то спорите о прелестях белого и сладкого. Оба подхода имеют право на жизнь и прекрасно живут в условиях своей специфики :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2010, 10:23 |
|
||
|
"Эмулирование" транзакций
|
|||
|---|---|---|---|
|
#18+
Игорь ГорбоносВы как-то спорите о прелестях белого и сладкого. Да мы уже и не спорим, так, вяло пинаемся... White OwlНет. У меня Маши и Пети обычно сидят на разных континентах. Для меня блокировка любого вида - немедленное растерзание. Намного простительнее потерять часовую работу одного человека чем заблокировать тысячу. Это немного другое дело. Ну как минимум всем редактирующим пользователям должно немедленно выдаваться предупреждение о том, что карточку редактируют 2+ человек. Впрочем, полагаю, у тебя это реализовано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2010, 10:31 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36627367&tid=2159800]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 407ms |

| 0 / 0 |
