Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизТранзакции Найти похожие ветки
← →
SeZu (2006-03-30 14:04) [0]При добавлении или редактировании записи в таблице у меня запускается транзакция. Когда в это же время на другом компьютере пытаешься просмотреть эту таблицу, все подвисает пока не завершится транзакция или не истечет таймаут запроса.
Как сделать чтобы можно было одновременно редактировать записи и просматривать таблицу.
Работаю через АДО. Транзакция на запись и редактирование обязательно должна быть.
← →
Nikolay M. © (2006-03-30 14:16) [1]
> SeZu (30.03.06 14:04)
> При добавлении или редактировании записи в таблице у меня
> запускается транзакция.
Тебя пользователи еще не убили? А если кто-то начал что-то редактировать и ушел чай пить? Одно из первых правил в блокировочных серверах БД: транзакции должны быть максимально короткими.
← →
SeZu (2006-03-30 14:26) [2]Транзакция необходима для решения задачи, иначе мне придется запоминать огромную кучу манипуляций пользователя, чтобы потом либо воспроизводить все эти действия, либо ничего не делать, что очень сильно затрудняет решение задачи!
И наиболее оптимальный путь решения - это через транзакции. И пусть пользователи хоть чай пьют, хоть в отпуск уходят!
← →
Mike Kouzmine © (2006-03-30 14:35) [3]SeZu (30.03.06 14:26) [2] А транзакции все одинаковые?
← →
Nikolay M. © (2006-03-30 14:36) [4]
> иначе мне придется запоминать огромную кучу манипуляций
> пользователя, чтобы потом либо воспроизводить все эти действия,
> либо ничего не делать
Что-то мне подсказывает, что ClientDataSet - твой выбор.
> очень сильно затрудняет решение задачи
Смирись - это издержки профессии.
> И пусть пользователи хоть чай пьют, хоть в отпуск уходят!
А вот при таком подходе ушедшим однажды можешь оказаться ты, причем совсем не в отпуск.
На пальцах скажи, что делаешь?
← →
sniknik © (2006-03-30 14:40) [5]> чтобы потом либо воспроизводить все эти действия, либо ничего не делать
что транзакциями "откат" реализован?
> Тебя пользователи еще не убили? ;)
> И наиболее оптимальный путь решения - это через транзакции.
это ты глубоко ошибаешся. оптимальный путь это использовать то для чего это предназначено, но не для другого. (обода от бочки ты же не вставляеш заместо колес велосипеду? хотя тоже круглые и по размеру подходят. или... а вдруг? ;)
см. нелп по Cashed Updates.
> Что-то мне подсказывает, что ClientDataSet - твой выбор.
не стоит. в ADO это встроено. (может "не в том обьеме", но большая часть. даже не заметиш разници по функционалу, но проще в работе)
← →
SeZu (2006-03-30 15:00) [6]Транзакция одна.
В общем есть таблица с карточками у коророй есть еще 5 подчиненных таблиц в которых содержатся дополнительные периодические поля каждой карточки. Причем как таблице карточек, так и в подчиненных таблицах примерно полей по 20-30 в каждой.
В общем при редактировании карточки, узер может добавлять, редактировать, удалять записи в подчиненных таблицах. И при нажатии ОК все сохраняется, либо отменяется по Отмена.
А при добавлении новой карточки, такая фишка, долна полностью скопироваться предыдущая введенная карточка и все записи из подчиненных таблиц тоже должны скопироваться, далее юзер немного правит ее и либо ОК, либо Отмена.
Короче все это прекрасно работало с транзакцими на одном компе, но заказчику вдруг понадобилось делать все это на двух компах и тут начались висяки.
И переделывать программу на другой лад, уже просто не реально, завтра все должно работать! Следовательно надо разобраться с транзакциями.
← →
Nikolay M. © (2006-03-30 15:10) [7]Путь первый, правильный: снять с заказчика денег на доработку, если в исходной задаче многопользовательская работа не была предусмотрена и сделать все по уму. Если это подразумевалось - ты сам виноват.
Путь второй, неправильный: сделать в таблицах флажок типа состояния записи "редактируется\введена".
← →
sniknik © (2006-03-30 15:21) [8]> завтра все должно работать!
мечтатель...
> сделать в таблицах флажок типа состояния записи "редактируется\введена".
не поможет. блокируется то таблица, а не запись.
но можно наверное с "грязным" чтением транзакции открывать, или в запросе это указывать. но тут еще незвестно как оно себя поведет, пробовать надо, да еще после, если получится, коллизии возможные отлавливать... нет не стоит.
лучше идти по первому пути.
← →
Nikolay M. © (2006-03-30 16:06) [9]
> > сделать в таблицах флажок типа состояния записи "редактируется\введена".
>
> не поможет. блокируется то таблица, а не запись.
Ты меня удивляешь.
Я имел ввиду, что с помощью флажка отказаться от транзакций вообще. И никаких блокировок не будет.
Кстати, почему на аську не отзываешься?
← →
sniknik © (2006-03-30 18:19) [10]> Кстати, почему на аську не отзываешься?
у меня стоит игнорировать все кто не в списке (я тебя даже не заметил ;)
← →
sniknik © (2006-03-30 18:20) [11]если надо пришли письмом свою, добавлю.
← →
Nikolay M. © (2006-03-30 19:28) [12]
> sniknik ©
Дык раньше же получал! За что из контакта удалил? :)
← →
Nikolay M. © (2006-03-30 19:29) [13]
> если надо пришли письмом свою, добавлю
У меня в анкете указана. Не то чтобы надо, но что-то я у тебя утром спросил и забыл :(
← →
ЮЮ © (2006-03-31 07:56) [14]TCustomADODataSet.LockType
type TADOLockType = (ltUnspecified, ltReadOnly, ltPessimistic, ltOptimistic, ltBatchOptimistic);
← →
Bless © (2006-03-31 15:16) [15]SeZu (30.03.06 14:04) >
Че-то я не пойму.
Перевод строки (в гриде, например) в состояние редактирования заблокирует эту строку только если LockType стоит ltPessimistic. По умолчанию стоит ltOptimistic и никаких проблем быть не должно в этом случае.
Если же строка не просто переводится в состояние редактирования, а как-то явно накладывается транзакция, то хотелось бы взглянуть на код.
ЮЮ © (31.03.06 07:56) [14]>
Ну и причем тут BatchOptimistic?
← →
Bless © (2006-03-31 15:17) [16]Упс, провтыкал [6]
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.044 c