&SCOPED-DEFINE MAINDB DB1_name
&SCOPED-DEFINE SECONDDB DB2_name
DEF VAR cv_answer AS CHAR NO-UNDO.
DEF VAR lv_i AS INT NO-UNDO.
DEF VAR hv_maindb AS HANDLE NO-UNDO.
DEF VAR hv_seconddb AS HANDLE NO-UNDO.
CREATE BUFFER hv_maindb FOR TABLE "{&MAINDB}._field".
CREATE BUFFER hv_seconddb FOR TABLE "{&SECONDDB}._field".
OUTPUT TO "c:\temp\diff.csv".
FOR EACH {&MAINDB}._file WHERE
{&MAINDB}._file._File-Name = "container"
OR {&MAINDB}._file._File-Name = "order"
NO-LOCK BY {&MAINDB}._file._File-Name:
FIND {&SECONDDB}._file WHERE
{&SECONDDB}._file._file-name = {&MAINDB}._file._File-Name
NO-LOCK NO-ERROR.
FOR EACH {&MAINDB}._Field WHERE
{&MAINDB}._Field._File-recid = RECID({&MAINDB}._file)
NO-LOCK:
FIND {&SECONDDB}._field WHERE
{&SECONDDB}._Field._File-recid = RECID({&SECONDDB}._file)
AND {&SECONDDB}._Field._Field-Name = {&MAINDB}._Field._Field-Name
NO-LOCK NO-ERROR.
IF AVAILABLE {&SECONDDB}._field
THEN DO:
cv_answer = "".
/*DISP {&MAINDB}._Field.*/
BUFFER-COMPARE {&MAINDB}._Field
EXCEPT _file-recid
TO {&SECONDDB}._field
SAVE RESULT IN cv_answer.
/*If different output details to a file*/
IF cv_answer <> ""
THEN DO:
/*MESSAGE cv_answer. PAUSE.*/
/*hv_maindb:FIND-FIRST("where _file-recid = " + RECID({&MAINDB}._file)
+ " AND _Field-Name = " + {&MAINDB}._Field._Field-Name
) NO-ERROR.*/
hv_maindb:FIND-BY-ROWID( ROWID({&MAINDB}._field), NO-LOCK ).
hv_seconddb:FIND-BY-ROWID( ROWID({&SECONDDB}._field), NO-LOCK ).
IF hv_maindb:AVAILABLE AND
hv_seconddb:AVAILABLE
THEN DO:
PUT UNFORMATTED "Table,Field,Att,{&MAINDB},{&SECONDDB}, " '"(' cv_answer ')"' SKIP.
lv_i = 1.
REPEAT WHILE lv_i <= NUM-ENTRIES(cv_answer):
PUT UNFORMATTED {&MAINDB}._file._File-Name
"," hv_maindb:BUFFER-FIELD("_Field-Name"):BUFFER-VALUE
"," ENTRY(lv_i, cv_answer, ",")
"," '"' hv_maindb:BUFFER-FIELD(ENTRY(lv_i, cv_answer, ",")):BUFFER-VALUE '"'
"," '"' hv_seconddb:BUFFER-FIELD(ENTRY(lv_i, cv_answer, ",")):BUFFER-VALUE '"'
SKIP.
lv_i = lv_i + 1.
END.
PUT SKIP(1).
END.
END. /*If cv_answer <> ""*/
END. /*available {&SECONDDB}._field*/
END. /*Each Field*/
END. /*Each file*/
OUTPUT CLOSE.