Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
TABLEREVERT() does not revert....?
Message
From
20/10/2003 15:33:37
 
 
To
20/10/2003 13:12:52
John Vlahos
V I Software Solutions Design
Mississauga, Ontario, Canada
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
00840357
Message ID:
00840425
Views:
17
John,

If you want to undo changes in all 7 tables if any one update fails or if the user decides to abort, you should wrap the updates in a transaction and rollback all changes if any tableupdate fails or is cancelled. Outside of a transaction, once a tableupdate on any of tables has been issued either explicitly or implicitly, there is no way that tablerevert can roll back the changes that have already been updated. You would have to have code to delete the previously updated records in that case.

Also, I don't see where you are replacing ID field in each of the tables that relates the records together, but I assume that you are doing this somewhere. I don't use pessimistic row buffering so this is just a SWAG but that may be causing an implicit tableupdate with the relations that you have set.

HTH

>I had a huge table which I split into 7 smaller tables and set a relation in the first table (LABORATORY). For every record in LABORATORY there is and only is one relational record in each of the oher 6 tables.
>
>ADD-
>I have two command buttons on a form, Add and Undo. When user clicks add I append a blank record to each table and replace some fields with some ID information.
>UNDO-
>When user clicks undo I issue a TABLEREVERT() and abandon the add operation and expect to revert all tables.
>
>PROBLEM---
>My first TABLEREVERT() works while the other 6 TABLEREVERT do not revert the tables.
>
>Is there something I am doing wrong?
>
>Below is my code:
>=================
>
>In the load event of the form:
>*-------------------------------------------Load()
>USE LABORATORY IN 0 ORDER TAG ID OF LABORAROTY SHARED
>CURSORSETPROP("Buffering", 2, "LABORATORY")
>USE LAB_PHYSICAL IN 0 ORDER TAG CLAB_ID OF LAB_PHYSICAL SHARED
>CURSORSETPROP("Buffering", 2, "LAB_PHYSICAL")
>USE LAB_VISUAL IN 0 ORDER TAG CLAB_ID OF LAB_VISUAL SHARED
>CURSORSETPROP("Buffering", 2, "LAB_VISUAL")
>USE LAB_MECHANICAL IN 0 ORDER TAG CLAB_ID OF LAB_MECHANICAL SHARED
>CURSORSETPROP("Buffering", 2, "LAB_MECHANICAL")
>USE LAB_COMP IN 0 ORDER TAG CLAB_ID OF LAB_COMP SHARED
>CURSORSETPROP("Buffering", 2, "LAB_COMP")
>USE LAB_TREATMENT IN 0 ORDER TAG CLAB_ID OF LAB_TREATMENT SHARED
>CURSORSETPROP("Buffering", 2, "LAB_TREATMENT")
>USE LAB_RUNNING IN 0 ORDER TAG CLAB_ID OF LAB_RUNNING SHARED
>CURSORSETPROP("Buffering", 2, "LAB_RUNNING")
>
>SET RELATION TO ;
> ID INTO LAB_PHYSICAL,;
> ID INTO LAB_VISUAL, ;
> ID INTO LAB_MECHANICAL, ;
> ID INTO LAB_COMP, ;
> ID INTO LAB_TREATMENT, ;
> ID INTO LAB_RUNNING, ;
> CWORKORDERID INTO SALEORDER_ITEMS ;
> IN LABORATORY
>
>*-------------------ADD NEW RECORD (COMMAND BUTTON ON THE FORM)-------------
>LOCAL ARRAY laLAB_TABLES(6)
>LOCAL li
>WITH THISFORM
> .oCurrentData.RecordAppend()
> laLAB_TABLES[1] = "LAB_PHYSICAL"
> laLAB_TABLES[2] = "LAB_VISUAL"
> laLAB_TABLES[3] = "LAB_MECHANICAL"
> laLAB_TABLES[4] = "LAB_COMP"
> laLAB_TABLES[5] = "LAB_TREATMENT"
> laLAB_TABLES[6] = "LAB_RUNNING"
> FOR li = 1 TO ALEN("laLAB_TABLES")
> APPEND BLANK IN laLAB_TABLES[li]
> REPLACE KEY WITH SYS(2015) IN laLAB_TABLES[li]
> REPLACE tAddStamp WITH DATETIME() IN laLAB_TABLES[li]
> REPLACE cAddBy WITH pcUserName IN laLAB_TABLES[li]
> NEXT li
>ENDWITH
>
>*--------ABANDON - UNDO ADDITION OF NEW RECORD (COMMAND BUTTON ON THE FORM)-
>WITH THISFORM.oCurrentData
> llReturnValue = TABLEREVERT(.F., ._cAlias)
>IF NOT llReturnValue = 0
> TABLEREVERT(.F., "LAB_PHYSICAL")
> TABLEREVERT(.F., "LAB_VISUAL")
> TABLEREVERT(.F., "LAB_MECHANICAL")
> TABLEREVERT(.F., "LAB_COMP")
> TABLEREVERT(.F., "LAB_TREATMENT")
> TABLEREVERT(.F., "LAB_RUNNING")
>ENDIF
Previous
Reply
Map
View

Click here to load this message in the networking platform