Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Откат изменений в ADO / 3 сообщений из 3, страница 1 из 1
15.12.2002, 14:44
    #32079398
Zeppelin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений в ADO
Как правильно обеспечить возможность отказа от внесения новой (изменения ) записи
Используя MSDataShape?

У меня есть два рекордсета : Main и Child.
Например, накладная и содержание накладной. Я ввожу новую накладную , а потом отказываюсь от ввода. Или при редактировании были введены новые строки в накладную, и какие – то удалены , а потом отказываюсь от изменений.



Новые записи я добавляю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
…
Main->AddNew();
…
//накладная
Main->GetFields()->GetItem( "Nomer" )->Value =vNomer;
…
Main->UpdateBatch(adAffectCurrent);


Child       = Main->GetFields()->GetItem( "IDRelation" )->Value; //подчиненный рекордсет
Child->AddNew();

…
//строчка в накладной
Child->Fields->GetItem( "TovarID" )->Value =vTovarID;
…
//записываю внешний ключ иначе выдается ошибка целостности 
Child->Fields->GetItem( "ParentID" )->Value = Main->GetFields()->GetItem( "ID" )->Value;
…
Child ->UpdateBatch(adAffectAll);

…


то есть пока в я не запишу в базу строку родительского рекордсета UpdateBatch(adAffectCurrent);
в строки дочернего рекордсета не записываются в БД


Помогите , плиз.
...
Рейтинг: 0 / 0
15.12.2002, 17:00
    #32079488
Igogo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений в ADO
Посмотри методы BeginTran, CommitTrans, RollbackTrans для адошных коннекшенов :)
...
Рейтинг: 0 / 0
15.12.2002, 17:31
    #32079497
Zeppelin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений в ADO
Нашел! Проверял только под MSSQLServer.

таблица Main - поле ключа ID
таблица Child - поле ключа ID, поле внешнего ключа - MainID

1) В таблице Main : PrimaryKey - ID
2) В таблице Child : PrimaryKey - ID+MainID ; RelationShip: Main.ID - Child.MainID

3) теперь все получается:…
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
	Main->AddNew();
	…
	//накладная
	Main->GetFields()->GetItem( "Nomer" )->Value =vNomer;
…
//Main->UpdateBatch(adAffectCurrent);//убрали!


Child       = Main->GetFields()->GetItem( "IDRelation" )->Value; //подчиненный рекордсет
Child->AddNew();

…
//строчка в накладной
Child->Fields->GetItem( "TovarID" )->Value =vTovarID;

...
//здесь можно сделать откат если нужно
...

Main->UpdateBatch(adAffectCurrent);//перенесли сюда. Ура товарищи!
…
//записываю внешний ключ, иначе выдается ошибка целостности 
Child->Fields->GetItem( "ParentID" )->Value = Main->GetFields()->GetItem( "ID" )->Value;
…
Child ->UpdateBatch(adAffectAll);
…
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Откат изменений в ADO / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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