Progress OpenEdge: Dynamic fill a Temp-Table/ProDataSet

24 Jul 2014

There are several ways to fill a dynamically generated Temp-Table in Progress OpenEdge ABL. But here I'll show you the most elegant and the fastest method.


In the first example you see the classical way for filling a temp table.
DEFINE VAR bCustomer    AS HANDLE NO-UNDO.
DEFINE VAR h-ttCustomer AS HANDLE NO-UNDO.   
DEFINE VAR httCustomer  AS HANDLE NO-UNDO. 
DEFINE VAR hquery       AS HANDLE NO-UNDO.

CREATE BUFFER bCustomer FOR TABLE "Customer".
CREATE TEMP-TABLE h-ttCustomer.
h-ttCustomer:CREATE-LIKE(bCustomer).
h-ttCustomer:TEMP-TABLE-PREPARE("tt-Customer").
httCustomer = h-ttCustomer:DEFAULT-BUFFER-HANDLE.
      
CREATE QUERY hquery.
hquery:SET-BUFFERS(bCustomer).
hquery:QUERY-PREPARE("FOR EACH Customer NO-LOCK").
hquery:FORWARD-ONLY.
hquery:QUERY-OPEN.
hquery:GET-FIRST(NO-LOCK).
DO WHILE NOT hquery:QUERY-OFF-END.
  httCustomer:BUFFER-CREATE.
  httCustomer:BUFFER-COPY(bCustomer).
  hquery:GET-NEXT(NO-LOCK).
END.
hquery:QUERY-CLOSE.
DELETE OBJECT hquery.

Now the same fill the same Temp-Table with the use of a ProDataSet.

DEFINE VAR bCustomer    AS HANDLE NO-UNDO.
DEFINE VAR h-ttCustomer AS HANDLE NO-UNDO.   
DEFINE VAR httCustomer  AS HANDLE NO-UNDO. 
DEFINE VAR hDsSource    AS HANDLE NO-UNDO.
DEFINE VAR hDs          AS HANDLE NO-UNDO.

CREATE BUFFER bCustomer FOR TABLE "Customer".
CREATE TEMP-TABLE h-ttCustomer.
h-ttCustomer:CREATE-LIKE(bCustomer).
h-ttCustomer:TEMP-TABLE-PREPARE("tt-Customer").
httCustomer = h-ttCustomer:DEFAULT-BUFFER-HANDLE.

/* we need a ProDataSet to fill*/      
CREATE DATASET hDs.
hDs:ADD-BUFFER(httCustomer).
      
CREATE DATA-SOURCE hDsSource.
hDsSource:ADD-SOURCE-BUFFER(bCustomer,?).
httCustomer:ATTACH-DATA-SOURCE(hDsSource).
hDsSource:FILL-WHERE-STRING = "WHERE". /*...*/
hDs:FILL().
httCustomer:DETACH-DATA-SOURCE().
    
DELETE OBJECT hDsSource.

No comments:

Post a comment

newer post older post home