Войти

Показать полную графическую версию : C++ Builder. Отмена всех изменённых полей. Как решить?


S1stem
11-08-2009, 16:07
Есть форма, на которой есть DBGrid. Через нужные проводники он подключем к базе данных.
В эту таблицу можно добавлять, удалять, и редактировать записи. После изменения, добавления сразу же записывается в базу.
К примеру: Я открыл эту форму, потолину данных из таблицы удалил, потовину изменил, что то добавил и нажал на форме кнопку "отменить". После чего все произведённые изменения должны отмениться и принять прежний вид.
С кнопкой сохранить вроде ничего делать лишнего не надо.

Какие есть варианты реализации такого?
Я думал перед открытием формы делать копию DataSet'a и при нажатии кнопки "отмена" просто заменять DataSet. Но по моему это не очень хорошее решение, и я уверен что есть что то по лучше. Думаю много кто с этим сталкивался.

dmitryst
11-08-2009, 16:30
S1stem, самый правильный вариант - применить транзакции. "START TRANSACTION" в самом начале операций с БД, и "COMMIT" в самом конце, перед нажатием кнопки сохранения. На кнопку сброса повесить "ROLLBACK"

S1stem
11-08-2009, 16:32
Была мысль. Ниразу ещё не работал с транзакциями.
Буду разбираться

dmitryst
11-08-2009, 16:43
Ниразу ещё не работал с транзакциями. »
хе-хе, я тоже :). А сама БД какая? Если MySQl, то нужен танец с бубном. Фирменный. Чтобы autocommit убрать. С другими БД не знаю, как там у них по-умолчанию.

S1stem
11-08-2009, 16:55
Раньше писал для Access, сейчас перешли на MSSQL.
стоит вроде 2008 сервер

dmitryst
11-08-2009, 17:15
тогда надо уточнить насчет настройки транзакций. Можно хотя бы из консольного клиента попробовать.

S1stem
11-08-2009, 17:47
Щас посаветовался и понял что там вроде как не желательно транзакцию начинать, потому что поля заполняет человек, и он может делать это слишком долго или уйти, в то время пока другие будут ещё подлючатся туда и.т.д. Нашли покачто немного другое решение.




© OSzone.net 2001-2012