Save table field name to a database

Mkontwg

Member
Hi team

Can anyone help me, i have a handler that save record but its not saving well to a database .
AppServer code
Code:
PROCEDURE getEmail: 
  DEFINE INPUT  PARAMETER ipcAcc  AS CHARACTER NO-UNDO.
  DEFINE INPUT  PARAMETER ipcType AS CHARACTER NO-UNDO.
  DEFINE OUTPUT PARAMETER DATASET-HANDLE  ophdsEmail BY-VALUE.
  DEFINE OUTPUT PARAMETER opcError  AS CHARACTER NO-UNDO. 
 
   FOR EACH drsemail WHERE drsemail.dm-accno = ipcAcc
                       AND drsemail.dem-type = TRIM(ipcType) NO-LOCK:
                 
        CREATE tt-Emails.
            ASSIGN tt-Emails.tt-Ed = drsemail.dem-email
                    tt-Emails.tt-Status = "CREATED"
                    tt-Emails.tt-rowid = ROWID(drsemail).
        IF tt-Emails.tt-Status  = "AMENDED" THEN DO: 
         ASSIGN drsemail.dem-email = tt-Emails.tt-Ed.
         END.
                      
    END. 
    FIND FIRST drsemail WHERE ROWID(drsemail) = tt-Emails.tt-rowid
                EXCLUSIVE-LOCK.
     
    
    
    BUFFER  tt-Emails:FILL-MODE = "NO-FILL".        
    BUFFER  tt-Emails:ATTACH-DATA-SOURCE(DATA-SOURCE srcEmails:HANDLE).       
    DATASET dsEmails:FILL ().        
    BUFFER  tt-Emails:DETACH-DATA-SOURCE().  
  
   ophdsEmail = DATASET dsEmails:HANDLE.  
  
 END PROCEDURE.


Client side code for Save handler(event)
     METHOD OVERRIDE PROTECTED VOID btnSave_Click(INPUT sender AS System.Object, INPUT e AS System.EventArgs): 
         DEFINE VARIABLE cError AS LONGCHAR NO-UNDO.
        
         
         bs:CurrencyManager:EndCurrentEdit().
         bs:Assign().
         bsdebtor:CurrencyManager:EndCurrentEdit().
         bsdebtor:Assign().
         IF VALID-HANDLE (StatGeneral:hAppServer) THEN DO: 
             setWaitStates(FALSE).
             RUN general\EMaint.p ON StatGeneral:hAppServer PERSISTENT SET hProc.
             
             IF VALID-HANDLE (hProc) THEN DO: 
                 RUN getEmail IN hProc(INPUT txtAcc:Text, 
                                        INPUT cboType:Text,
                                        OUTPUT DATASET-HANDLE ophdsEmail,
                                        OUTPUT cError).
                                        
                    DELETE PROCEDURE hProc.
                 END.
                    setFields().
                    
                  bs:Handle = ophdsEmail.
               END.
             
         SUPER:btnSave_Click(INPUT sender, INPUT e).
         RETURN.
         END METHOD.

What am i missing please assist, thanks.
 

Osborne

Active Member
It is not quite clear what you are trying to do, but three things instantly stand out in the following block:

Code:
   FOR EACH drsemail WHERE drsemail.dm-accno = ipcAcc
                       AND drsemail.dem-type = TRIM(ipcType) NO-LOCK:  /*3*/

        CREATE tt-Emails.
            ASSIGN tt-Emails.tt-Ed = drsemail.dem-email
                    tt-Emails.tt-Status = "CREATED"                    /*2*/
                    tt-Emails.tt-rowid = ROWID(drsemail).
        IF tt-Emails.tt-Status  = "AMENDED" THEN DO:                   /*1*/
         ASSIGN drsemail.dem-email = tt-Emails.tt-Ed.
         END.
             
    END.

1 - drsemail.dem-email is only being updated if tt-Emails.tt-Status = "AMENDED".
2 - tt-Emails.tt-Status is always being set to "CREATED" so is never set to "AMENDED".
3 - The records are being read with a NO-LOCK, so even if tt-Emails.tt-Status = "AMENDED" an update could not take place.
 

Mkontwg

Member
It is not quite clear what you are trying to do, but three things instantly stand out in the following block:

Code:
   FOR EACH drsemail WHERE drsemail.dm-accno = ipcAcc
                       AND drsemail.dem-type = TRIM(ipcType) NO-LOCK:  /*3*/

        CREATE tt-Emails.
            ASSIGN tt-Emails.tt-Ed = drsemail.dem-email
                    tt-Emails.tt-Status = "CREATED"                    /*2*/
                    tt-Emails.tt-rowid = ROWID(drsemail).
        IF tt-Emails.tt-Status  = "AMENDED" THEN DO:                   /*1*/
         ASSIGN drsemail.dem-email = tt-Emails.tt-Ed.
         END.
            
    END.

1 - drsemail.dem-email is only being updated if tt-Emails.tt-Status = "AMENDED".
2 - tt-Emails.tt-Status is always being set to "CREATED" so is never set to "AMENDED".
3 - The records are being read with a NO-LOCK, so even if tt-Emails.tt-Status = "AMENDED" an update could not take place.

I hear you now, what i am aiming to achieve, is my data-set to store all records from the database only.
 

Osborne

Active Member
There appears to be bits missing from the dataset workings which may be in other sections. If not, then the following is a very simple dataset example that will work against the Sports2000 database to give an idea what is required:
Code:
DEF TEMP-TABLE ttCustomer NO-UNDO LIKE Customer.

DEFINE DATASET dataSetCust FOR ttCustomer.

DEFINE QUERY q1 FOR Customer.

DEFINE DATA-SOURCE dataSource FOR QUERY q1 Customer.

BUFFER ttCustomer:ATTACH-DATA-SOURCE(DATA-SOURCE dataSource:HANDLE).

QUERY q1:QUERY-PREPARE("FOR EACH Customer WHERE Customer.CustNum < 30 NO-LOCK").

DATASET dataSetCust:FILL().

BUFFER ttCustomer:DETACH-DATA-SOURCE().

FOR EACH ttCustomer:
   DISPLAY ttCustomer.CustNum ttCustomer.Name.
END.
 
Top