What code will print schema to file?

Depends what exactly you want.

You can output to file from Tools, database, reports.

Or you could code something up to do it - can we have a few more details of your requirements please?
 
Here's something that will sort of do what you want... just update output everything... I use this to reconcile two DB's schemas in a while you can show to developers.

Code:
&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.
 
Back
Top