how to control commit/rollback

Discussion of open issues, suggestions and bugs regarding MyDAC (Data Access Components for MySQL) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
Hans
Posts: 52
Joined: Wed 24 Aug 2005 20:05

how to control commit/rollback

Post by Hans » Sun 11 Sep 2005 07:26

When using multiple QRY and TBL components on a Fom I wonder how I can control commit/rollback. I created a wizard using a pagecontrol and want to be able to commit/rollback all updates/inserts in the last page but I donot understand how I can see if anything has been updated and/or inserted. I look at the 'modified' property but I believe if I do a Post in an earlier page the rollback seems to be ignored.

Is there an example available or can someone explain this? (Do I have to use cachedUpdates???

Thanks,
Hans

swierzbicki
Posts: 451
Joined: Wed 19 Jan 2005 09:59

Post by swierzbicki » Mon 12 Sep 2005 06:27

When creating your wizard :
execute this statement:
START TRANSACTION;

Now, let your user do what he want to do....

On the finich button :
COMIT;

On the cancel button
ROLLBACK;

GEswin
Posts: 186
Joined: Wed 03 Nov 2004 16:57
Location: Spain
Contact:

Post by GEswin » Mon 12 Sep 2005 08:41

Perhaps a better solution;

1) On FormCreate -> myConnection.StartTransaction;
2) On Accept -> if myConnection.InTransaction then myConnetion.Commit;
3) On Cancel -> if myConnection.InTransaction then myConnetion.RollBack;

Regards

Ikar
Posts: 1693
Joined: Thu 28 Oct 2004 13:56

Post by Ikar » Mon 12 Sep 2005 11:34

First of all, you should use transaction-safe table type (InnoDB). Use methods TMyConnection.StartTransaction etc to transactional control. May be you need to read help about CachedUpdates mode. Also, you can see CachedUpdates Demo

Hans
Posts: 52
Joined: Wed 24 Aug 2005 20:05

Post by Hans » Sun 18 Sep 2005 07:38

Thank you all for your replies! It is very nice to get some support of others.
I believe I understand the transaction mechanism now. I think I have to write some code to find out if something has changed in order to ask the user if he/she wants to save changes. It seems that the DataSet->modified flag refers to the active record only. Since I am using multiple DataSets and the user can edit multiple records, I believe I have to create my own modified flag per DataSet which tells me if one ore more records in a DataSet has been changed.

i.e. if you change a record in a grid a post is done after you TAB the last field. Than the next record is selected and the modified flag says nothing has been changed, since it only applies to the current record. I will have to do some administration using OnPost and OnCancel.

Post Reply