I am trying to update a record in a database by tracking changes of a temp-table. How should I modify my code, in order to do that?
I am able to create records, by using the following code:
DEFINE TEMP-TABLE t_Customer BEFORE-TABLE b_customer
FIELD custNum AS INTEGER
FIELD custName AS CHAR
INDEX idx1 IS UNIQUE PRIMARY Custnum.
DEFINE DATASET dsCust FOR t_Customer.
DEFINE DATA-SOURCE pds FOR Testare.Client KEYS(custNum,custNum).
BUFFER t_Customer:ATTACH-DATA-SOURCE(DATA-SOURCE pds:HANDLE,"custNum,custNum").
TEMP-TABLE t_Customer:TRACKING-CHANGES = TRUE.
CREATE t_Customer.
ASSIGN
t_Customer.custNum = NEXT-VALUE(seqClient)
t_Customer.custName = "test"
.
TEMP-TABLE t_Customer:TRACKING-CHANGES = FALSE.
DEFINE VAR beforeBuffer AS HANDLE.
DEFINE VAR beforeQuery AS HANDLE.
DEFINE VAR dsCustChanges AS HANDLE.
CREATE DATASET dsCustChanges.
dsCustChanges:CREATE-LIKE(DATASET dsCust:HANDLE).
dsCustChanges:GET-BUFFER-HANDLE(1):ATTACH-DATA-SOURCE(DATA-SOURCE pds:HANDLE,"custNum,custNum").
dsCustChanges:GET-CHANGES(DATASET dsCust:HANDLE, TRUE).
beforeBuffer = dsCustChanges:GET-BUFFER-HANDLE(1):BEFORE-BUFFER.
DO TRANSACTION:
IF VALID-HANDLE(BeforeBuffer) THEN
DO:
CREATE QUERY beforeQuery.
beforeQuery:ADD-BUFFER(beforeBuffer).
beforeQuery:QUERY-PREPARE("FOR EACH " + beforebuffer:NAME).
beforeQuery:QUERY-OPEN().
beforeQuery:GET-FIRST().
DO WHILE NOT beforeQuery:QUERY-OFF-END:
MESSAGE beforeBuffer:BUFFER-FIELD ("custName"):BUFFER-VALUE VIEW-AS ALERT-BOX.
MESSAGE beforeBuffer:ROW-STATE.
beforebuffer:SAVE-ROW-CHANGES(1).
IF beforebuffer:ERROR THEN
DO:
MESSAGE "error" VIEW-AS ALERT-BOX.
beforebuffer:REJECTED = TRUE.
END.
beforeQuery:GET-NEXT().
END.
DELETE OBJECT beforeQuery.
END.
END.