Chainika
Дата: 30.09.2004 16:47:19
Уважаемые господа, хочу у Вас спросить Ваше мнение: есть база в Accesse соеденяюсь через ADO. Например: форме есть DBGrid, и две кнопки «Редактирование записи» «Сохранить». Когда пользователь нажмет кнопку «Редактирование записи» (в обработчике код такой:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not ADOConnection1.InTransaction then
try
ADOConnection1.BeginTrans;
ADOTable1.Edit;
ADOTable1.FieldByName('editing').asBoolean := True;
ADOTable1.UpdateBatch();
ADOTable1.edit;
except
ADOConnection1.RollbackTrans;
end;
end; )
Стартует транзакция и запись блокируется для других пользователей.
А в обработчике кнопки «Сохранить» ( такой код
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOConnection1.СommitTrans;
ADOTable1.FieldByName('editing').asBoolean := False;
ADOTable1.UpdateBatch();
end;
) т.е запись сохраняется и транзакция тоже.
Хочу узнать чем такой метод плох или хорош. Можно ли пользоваться таким методом.
LPDem
Дата: 30.09.2004 17:07:53
А что, интересно, будет, если пользователь нажмёт «Редактирование записи», а потом закроет окно, не нажав «Сохранить»? Запись останется навсегда заблокированной?
Chainika
Дата: 30.09.2004 21:36:03
Нет по мимо это есть еще кнопка "Отмена". Но если даже не нажать эту кнопку о проста выйти грубо т.е. "Снят задачу" windowse то все равно запись разблокируется и она станет доступной для других пользователей.
ЗирГут
Дата: 30.09.2004 23:18:45
Chainika |
ADOConnection1.BeginTrans; ADOTable1.Edit; ADOTable1.FieldByName('editing').asBoolean := True;
|
А установку флажка в режим редактирования другие пользователи увидят?
Транзакция ведь не завершена. Для других пользователей запись по-прежнему свободна.
Chainika
Дата: 01.10.2004 00:01:55
Нет не увидят. Когда к полю EDITING присваиваешь значение TRUE и соответственно делает UpdateBach();, после этого набор еще раз переходит в состояние Edit. Но не знаю почему после этого запись блокируется. И для других все равно запись будет блокирована. Попробуй экспериментировать. Потом сам поймешь. Но в ADOTable1 курсор должен быть на сервере. На клиенте он блокирует все ближние записи. Я не могу понят почему он так делает.
Chainika
Дата: 05.10.2004 10:45:51
У кого еще какие мнения? Скажите пожалуйста