powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / "Эмулирование" транзакций
22 сообщений из 72, страница 3 из 3
"Эмулирование" транзакций
    #36626391
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlKonst_OneWhite OwlА чем не устраивает клиент-серверный подход?
видимо у автора где-то есть грязное чтение из используемых в транзакции таблиц, поэтому и не подходитЭто как это? Маша открыла запись, исправила одно поле, Петя на другой машине открыл эту же запись, увидел Машины исправления, поверх них сделал свои исправления. А потом кто-то из них нажал Save... Не, можно конечно и так жить, но заранее закладываться на чехарду нулевого уровня изоляции это .... я не знаю таких цензурных слов.

не так конечно , но может какие-то списки заполняются на формах из данных этих таблиц и тп
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626400
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНе, можно конечно и так жить, но заранее закладываться на чехарду нулевого уровня изоляции это .... я не знаю таких цензурных слов.

По моему вы подумали за ТС-а много лишнего. Ибо сделано у него все нормально и красиво, без грязных чтений и транзакций в разных соединениях, дальнейшие рассуждения только о том, а нельзя ли сделать еще красивее (/удобнее/практичнее)
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626408
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlShocker.Pro, сделай лучше это:
А потом рассматривай результаты

разумеется я получаю
Server: Msg 3903, Level 16, State 1, Line 14
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

ибо ты пытаешься откатить несуществующую транзакцию
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626546
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlorunbekпричина отказа от транзакций и использований промежуточных таблиц:

автор
представьте ситуацию:
1. пользователь открывает форму редактирования контактов, открывается транзакция
2. затем открывает в другой дочерней форме совсем другие данные и редактирует их
3. после завершения редактирования переходит к форме редактирования контактов и нажимает кнопку "ОТМЕНА", соответственно выполняется откат транзакции, т.е. получается что изменения в других таблицах тоже отменяется

сам пост
А чем не устраивает клиент-серверный подход?
При открытии формы редактирования, программа открывает транзакцию, выкачивает все нужные данные, закрывает транзакцию. Пользователь редактирует сколько душе угодно. Если в конце была нажата Cancel - просто закрываем форму и все. Если нажали Save - открываем транзакцию, записываем данные, закрываем транзакцию. Все. Минимум блокировок плюс максимальная надежность.

Сама задача несколько другая, я просто описал как бы прототип
в форме редактирования записи есть несколько гридов, в которых редактируются подчиненные данные основной записи, подобной таблице телефонов
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626552
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlKonst_OneWhite OwlА чем не устраивает клиент-серверный подход?
видимо у автора где-то есть грязное чтение из используемых в транзакции таблиц, поэтому и не подходитЭто как это? Маша открыла запись, исправила одно поле, Петя на другой машине открыл эту же запись, увидел Машины исправления, поверх них сделал свои исправления. А потом кто-то из них нажал Save... Не, можно конечно и так жить, но заранее закладываться на чехарду нулевого уровня изоляции это .... я не знаю таких цензурных слов.

нет, такого нет, в каждой записи есть дополнительное поле, которое указывает на то, что определенный пользователь уже открыл для редактирования, пока значение этого поля не сбросится никто другой не может редактировать запись
сброс происходит в двух случаях:
1. завершение редактирования
2. сброс администратором системы поля открытости записи

в коде подтверждения изменений есть проверка соответствия поля открытости значению в момент открытия,
эти "вещи", в принципе само-собою подразумевающиеся, из-за этого я и не стал про это писать
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626559
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProWhite OwlShocker.Pro, сделай лучше это:
А потом рассматривай результаты

разумеется я получаю
Server: Msg 3903, Level 16, State 1, Line 14
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

ибо ты пытаешься откатить несуществующую транзакцию
Замечательно. А теперь расскажи мне какой транзакции принадлежит какой из insert'ов?
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626566
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekСама задача несколько другая, я просто описал как бы прототип
в форме редактирования записи есть несколько гридов, в которых редактируются подчиненные данные основной записи, подобной таблице телефоновИ что это меняет? Или ты привязываешь гриды напрямую к курсорам? Если да, то срочно отвязывать. Пользователь должен иметь прямой доступ только к массивам в памяти клиентской машины.
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626568
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro... дальнейшие рассуждения только о том, а нельзя ли сделать еще красивее (/удобнее/практичнее)

попали в десятку!!!! этого и я жду в этой теме
к примеру
White OwlА чем не устраивает клиент-серверный подход?
При открытии формы редактирования, программа открывает транзакцию, выкачивает все нужные данные, закрывает транзакцию. Пользователь редактирует сколько душе угодно. Если в конце была нажата Cancel - просто закрываем форму и все. Если нажали Save - открываем транзакцию, записываем данные, закрываем транзакцию. Все. Минимум блокировок плюс максимальная надежность.

тоже интересный вариант, но как написал выше, есть еще дополнительные специфичные моменты, из-за которых описанный метод "чуть-чуть" не подходит
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626569
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.

И что?
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626586
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekнет, такого нет, в каждой записи есть дополнительное поле, которое указывает на то, что определенный пользователь уже открыл для редактирования, пока значение этого поля не сбросится никто другой не может редактировать запись
сброс происходит в двух случаях:
1. завершение редактирования
2. сброс администратором системы поля открытости записи

в коде подтверждения изменений есть проверка соответствия поля открытости значению в момент открытия,
эти "вещи", в принципе само-собою подразумевающиеся, из-за этого я и не стал про это писатьЭто вещь как раз из разряда "как делать не надо". Маша открыла запись и вместе с Админом ушла на обед. В результате никто к записи добраться не может.
Чтобы Маша с Петей могли редактировать одну и ту-же логическую запись и при этом свести конфликты к минимуму, достаточно запомнить предыдущее значение записи и перед физическим обновлением убедится что запись по прежнему в том состоянии в каком она была при прочтении. При несовпадении выдать соответсвующее окошко.

То есть схема в идеале будет такой:
- Открываем окно. Открываем курсоры. Читаем в собственные массивы все данные которые возможно редактировать. Читаешь дату последнего обновления записи. Закрываем курсоры.
- Пользователь редактирует все что ему угодно.
- Пользователь командует "Сохранить". Читаешь дату последнего обновления записи, если она совпадает с той которую ты прочитал в начале работы - просто сохраняешь все и обновляешь дату. Если не совпадает - выдаешь окно типа "КТО-ТО уже изменил эту запись! Прочитать изменения и вернуться в редактирование, игнорировать чужие изменения или отменить все и закрыть окно?"
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626603
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЭто вещь как раз из разряда "как делать не надо".

...

- Пользователь командует "Сохранить". Читаешь дату последнего обновления записи, если она совпадает с той которую ты прочитал в начале работы - просто сохраняешь все и обновляешь дату. Если не совпадает - выдаешь окно типа "КТО-ТО уже изменил эту запись! Прочитать изменения и вернуться в редактирование, игнорировать чужие изменения или отменить все и закрыть окно?"

И что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше Маша
а) бегает по всем пользователям выясняет и синхронизирует свои изменения со всеми другими пользователями
б) перезаписывает поверх, затирая работу других пользователей и внося сбои в процесс работы.
в) закрывает карточку, открывает заново и долго мучительно вспоминает, что же она редактировала.

Какой вариант наименее глупый?

Правильный ответ - блокировка карточки. Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет.

Для облегчения - права на разблокировку карточки даются нескольким ответственным лицам, чтобы кто-то из них всегда мог быть на месте, а также делается открытие карточки в режиме "только для чтения" если кто-то ее уже редактирует или даже всегда открывать только для чтения, а на редактирования выдывается дополнительной кнопкой.
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626605
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proпервый и последний инсерт выполняются внутри собственных implicit-транзакций (счетчиком мы этого не увидим)
второй выполняется в явно открытой транзакции, счетчиком мы увидим 1.Угу. А кто интересно закоммитил последнюю вставку? Я же ее отменять пытался? Я же там явно rollback написал! Какая сволочь последнюю вставку утвердила?
Мой хрустальный шар утверждает что у тебя включен AutoCommit. То есть изменения которые ты не предварял командой begin tran ты уже в принципе не сможешь откатить... Замечательно.
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626612
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИ что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше МашаА дальше Маша смотрит на дополнительный диалог и видит в нем новые текущие значения и изменные ею значения.

Shocker.ProПравильный ответ - блокировка карточки. Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет.Проще предусмотреть заранее, чем потом наказывать людей и надеятся что это наказание пойдет впрок.
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626614
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro[quot White Owl]
...
Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет.

Для облегчения - права на разблокировку карточки даются нескольким ответственным лицам, чтобы кто-то из них всегда мог быть на месте, а также делается открытие карточки в режиме "только для чтения" если кто-то ее уже редактирует или даже всегда открывать только для чтения, а на редактирования выдывается дополнительной кнопкой.

Вы прямо мой метод описываете, в интерфейсе клиента, по умолчанию и стоит кнопка чтения а чтобы изменить необходимо нажать дополнительную кнопочку и потом выбрать команду "Изменить запись", т.е. человек должен 100% уверенным быть, что он хочет изменить запись, т.е. открыть для "монопольного" изменения
по поводу "пиз$#лей" понравилось ;))))) Маша это заслужила ;))
А поводу прав, в программе предусмотрена возможность делегирования возможностей "сброса" статуса редактирования

P.S. Постепенно "выходят в свет" нюансы системы, про которые в начале темы не писал ;))....
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626618
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlУгу. А кто интересно закоммитил последнюю вставку? Я же ее отменять пытался? Я же там явно rollback написал! Какая сволочь последнюю вставку утвердила?
Мой хрустальный шар утверждает что у тебя включен AutoCommit. То есть изменения которые ты не предварял командой begin tran ты уже в принципе не сможешь откатить... Замечательно.

И что? Я должен каждый раз явно коммитить любой блин одиночный запрос? Я согласен, чтобы одиночный запрос коммитился сам, на то он и одиночный.

И вообще, не представляю себе ситуации, когда нужно откатывать одиночный запрос. Если я его написал, я же предполагаю его выполнять, а не откатывать.

А в случае пакета запросов я укажу транзакцию явно.

Не вижу сбоя в логике рассуждений.
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626621
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlShocker.ProИ что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше МашаА дальше Маша смотрит на дополнительный диалог и видит в нем новые текущие значения и изменные ею значения.

Shocker.ProПравильный ответ - блокировка карточки. Один раз Маша карточку не закроет в режиме редактирования, уйдя на обед, получит пиз$#лей и в следующий раз не забудет.Проще предусмотреть заранее, чем потом наказывать людей и надеятся что это наказание пойдет впрок.

Лучше резервировать, чем применять такой метод, можно даже в паре с вашим методом применять
т.е. выгрузить в машину клиента, при этом зарезервировав запись, а потом после завершения сначала проверяем резервацию, если это наш резерв, то подтверждаем изменения, иначе выдаем соответствующее сообщение
вроде ADO.NET что-то подобное используется? верно? т.е. связки с сервером базы данных нету?
выгружаются данные и потом редактируются, верно?
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626625
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekВы прямо мой метод описываете, в интерфейсе клиента, по умолчанию и стоит кнопка чтения а чтобы изменить необходимо нажать дополнительную кнопочку
...
в программе предусмотрена возможность делегирования возможностей "сброса" статуса редактирования

Да потому что к этому приходишь с опытом программирования определенного рода систем. Видимо у нас с вами системы похожего назначения, а Белый Сыч программирует какие-то другие системы. Например для прапорщиков
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626631
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlShocker.ProИ что? Пользователь внес кучу изменений. При сохранении выяснилось, что другой пользователь (или даже несколько других пользователей) внесли другую кучу изменений. Дальше МашаА дальше Маша смотрит на дополнительный диалог и видит в нем новые текущие значения и изменные ею значения.

Это хорошо при трех-четырех полях на одном уровне. А если это таблица, где могут быть удаленные, добавленые и измененные записи? А если таких таблиц несколько? А если внесенных изменений несолько? А если на форме несколько закладок? Да ты задолбаешься программировать интерфейс сравнения версий, не говоря уж о том, что надо вести полные логи изменений, что тоже не всегда оправдано.
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36626721
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProorunbekВы прямо мой метод описываете
Да потому что к этому приходишь с опытом программирования определенного рода систем.
Есть некоторое отличие - блокировки пишу не в редактируемую таблицу, а в некоторую сводную. Так проще очистить блокировки при аварийном пропадании клиента.

Shocker.Pro Например для прапорщиков
Надеюсь не слишком погорячился в пылу спора? А то прошу прощения!
White Owl - возвращайся! Ты еще не показал пример с ошибкой 111
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36627031
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДа потому что к этому приходишь с опытом программирования определенного рода систем. Видимо у нас с вами системы похожего назначения, а Белый Сыч программирует какие-то другие системы. Например для прапорщиков Нет. У меня Маши и Пети обычно сидят на разных континентах. Для меня блокировка любого вида - немедленное растерзание. Намного простительнее потерять часовую работу одного человека чем заблокировать тысячу.

Shocker.ProWhite Owl - возвращайся! Ты еще не показал пример с ошибкой 111 И не покажу. Это уже я погорячился слегка. 111-ая возникает при отправке DDL команд которые не любят быть в пакете, операторными скобками оно не лечится.
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36627353
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, Shocker.Pro

Вы как-то спорите о прелестях белого и сладкого. Оба подхода имеют право на жизнь и прекрасно живут в условиях своей
специфики :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
"Эмулирование" транзакций
    #36627367
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносВы как-то спорите о прелестях белого и сладкого.

Да мы уже и не спорим, так, вяло пинаемся...

White OwlНет. У меня Маши и Пети обычно сидят на разных континентах. Для меня блокировка любого вида - немедленное растерзание. Намного простительнее потерять часовую работу одного человека чем заблокировать тысячу.

Это немного другое дело.
Ну как минимум всем редактирующим пользователям должно немедленно выдаваться предупреждение о том, что карточку редактируют 2+ человек. Впрочем, полагаю, у тебя это реализовано.
...
Рейтинг: 0 / 0
22 сообщений из 72, страница 3 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / "Эмулирование" транзакций
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]