ProDataSet Update Record (11912)

Posted by Sergiu Balauca on 02-Aug-2017 04:50

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.

All Replies

This thread is closed