getting value of a field

whwar9739

Member
Let's see if I can simplify this enough.

I am using a BUFFER-COMPARE statement and saving the results in a character variable.
With this I am trying to create some history in a table in the database using an existing program.
For this I need to be able to pass the value of a field from one of the buffers to the program.
Below is a basic snippet of the code

Code:
BUFFER-COMPARE xtable TO table SAVE RESULTS IN l-compare.

DO l-idx = 1 TO NUM-ENTRIES(l-compare):
   RUN existing.p(
       INPUT ENTRY(l-idx,l-compare) + "," + [I]value from table.entry(l-idx,l-compare)[/I]
    ).

Hopefully this makes sense as to what I am trying to do. The italicized section is where I need the help.

TIA.
 
Here is a code I used once ( you need to be at Version 9 at least ):

&SCOPED-DEFINE DLM CHR(1)

DEFINE VARIABLE hXBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFromValues AS CHARACTER NO-UNDO.
DEFINE VARIABLE cToValues AS CHARACTER NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE iField AS INTEGER NO-UNDO.

DO iField = 1 TO hXBuffer:NUM-FIELDS:
/* XTable holds the new record, Table the old one ... */
IF hXBuffer:BUFFER-FIELD(iField):BUFFER-VALUE <> hBuffer:BUFFER-FIELD(iField):BUFFER-VALUE THEN DO:
ASSIGN cFields = cFields + (IF cFields = '':U THEN '':U ELSE ',':U) + hXBuffer:BUFFER-FIELD(iField):NAME
cFromValues = cFromValues + (IF cFromValues = '':U THEN '':U ELSE {&DLM}) + hBuffer:BUFFER-FIELD(iField):BUFFER-VALUE
cToValue = cToValue + (IF cToValue = '':U THEN '':U ELSE {&DLM}) + hXBuffer:BUFFER-FIELD(iField):BUFFER-VALUE,
END.

END.

/* cFields will contain a CSV-list of names of the changed fields
cFromValues will contain a CHR(1)SV-list of before values
cToValues will contain a CHR(1)SV-list of after values */

&UNDEFINE DLM

You could go on from there and change it to fit your needs.

HTH, Richard.
 
Oooops - forgot something in the code ...

&SCOPED-DEFINE DLM CHR(1)
DEFINE VARIABLE hXBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFromValues AS CHARACTER NO-UNDO.
DEFINE VARIABLE cToValues AS CHARACTER NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE iField AS INTEGER NO-UNDO.
ASSIGN hXBuffer = BUFFER XTable:HANDLE
hBuffer = BUFFER Table:HANDLE.

DO iField = 1 TO hXBuffer:NUM-FIELDS:
/* XTable holds the new record, Table the old one ... */
IF hXBuffer:BUFFER-FIELD(iField):BUFFER-VALUE <> hBuffer:BUFFER-FIELD(iField):BUFFER-VALUE THEN DO:
ASSIGN cFields = cFields + (IF cFields = '':U THEN '':U ELSE ',':U) + hXBuffer:BUFFER-FIELD(iField):NAME
cFromValues = cFromValues + (IF cFromValues = '':U THEN '':U ELSE {&DLM}) + hBuffer:BUFFER-FIELD(iField):BUFFER-VALUE
cToValue = cToValue + (IF cToValue = '':U THEN '':U ELSE {&DLM}) + hXBuffer:BUFFER-FIELD(iField):BUFFER-VALUE,
END.
END.
&UNDEFINE DLM

Regards, RealHeavyDude.
 
Ok, I have seen this a little but I have never actually used handles and OO with Progress.
Would I still use a for each loop on the main tables. and where would I assign the handle? Would it be outside the for each or within it?
Thanks for the help I am certain that this will work for me just need to get a better understanding.
 
/* to get the last element in an array */
h_field_handle:EXTENT = x.
h_field_handle:BUFFER-VALUE(x) = "foo".

Despite some major flaws overall, Progress is actually pretty awesome when it comes to documentation. You should read it sometime ;)
 
Back
Top