[FONT=Verdana][SIZE=2]DEFINE VARIABLE cDir AS CHARACTER NO-UNDO.[/SIZE][/FONT]
[SIZE=2][FONT=Verdana]DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]DEFINE VARIABLE iTmp AS INTEGER NO-UNDO.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]DEFINE VARIABLE iTmp2 AS INTEGER NO-UNDO.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]DEFINE STREAM sOut.[/FONT][/SIZE]
[FONT=Verdana][SIZE=2]/* comment this line to dump all tables or change tablename to dump another table */[/SIZE][/FONT]
[SIZE=2][FONT=Verdana]&Scoped-define TABLE-NAME customer [/FONT][/SIZE]
[FONT=Verdana][SIZE=2]/* change this if you want different Delimiter then semi-colon */[/SIZE][/FONT]
[SIZE=2][FONT=Verdana]&SCOPED-DEFINE Delim ~';~'[/FONT][/SIZE]
[FONT=Verdana][SIZE=2]/* comment/uncomment eiter of next two statements to put in the first row fieldnames or fieldlabels*/[/SIZE][/FONT]
[SIZE=2][FONT=Verdana]/* if you don't want either of them comment both */[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]&SCOPED-DEFINE FieldNames *[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]&SCOPED-DEFINE FielLabels * [/FONT][/SIZE]
[FONT=Verdana][SIZE=2]/* output directory */[/SIZE][/FONT]
[SIZE=2][FONT=Verdana]ASSIGN cDir = 'C:\temp\'.[/FONT][/SIZE]
[FONT=Verdana][SIZE=2]FOR EACH _file WHERE &IF DEFINED(TABLE-NAME) [/SIZE][/FONT]
[SIZE=2][FONT=Verdana] &THEN _file._file-name = '{&TABLE-NAME}' AND[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] &endif[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] _file._hidden = NO NO-LOCK:[/FONT][/SIZE]
[FONT=Verdana][SIZE=2]OUTPUT STREAM sOut TO VALUE(cDir + _file._file-name + '.csv').[/SIZE][/FONT]
[FONT=Verdana][SIZE=2]CREATE BUFFER hBuffer FOR TABLE _file._file-name.[/SIZE][/FONT]
[FONT=Verdana][SIZE=2]CREATE QUERY hQuery.[/SIZE][/FONT]
[SIZE=2][FONT=Verdana]hQuery:ADD-BUFFER(hBuffer).[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]hQuery:QUERY-PREPARE("FOR EACH " + hBuffer:NAME + " NO-LOCK"). [/FONT][/SIZE]
[SIZE=2][FONT=Verdana]hQuery:QUERY-OPEN().[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]hQuery:GET-FIRST().[/FONT][/SIZE]
[FONT=Verdana][SIZE=2]&IF DEFINED(FieldNames) > 0 &THEN[/SIZE][/FONT]
[SIZE=2][FONT=Verdana] DO iTmp = 1 TO hBuffer:NUM-FIELDS:[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):NAME {&Delim}.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] END.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] PUT STREAM sOut SKIP.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]&ELSEIF DEFINED(FielLabels) &THEN[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] DO iTmp = 1 TO hBuffer:NUM-FIELDS:[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):LABEL {&Delim}.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] END.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] PUT STREAM sOut SKIP.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]&ENDIF[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]/* now the data */[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]DO WHILE NOT hQuery:QUERY-OFF-END:[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] DO iTmp = 1 TO hBuffer:NUM-FIELDS:[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] IF hBuffer:BUFFER-FIELD(iTmp):EXTENT = 0[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] THEN DO:[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] IF hbuffer:BUFFER-FIELD(iTmp):DATA-TYPE = "CHARACTER" [/FONT][/SIZE]
[SIZE=2][FONT=Verdana] THEN PUT STREAM sOut UNFORMATTED '"' hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE '"' {&Delim}.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] ELSE PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE {&Delim}.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] END.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] ELSE DO iTmp2 = 1 TO hBuffer:BUFFER-FIELD(iTmp):EXTENT: [/FONT][/SIZE]
[SIZE=2][FONT=Verdana] /* it is an extent field so we walk through the extents */ [/FONT][/SIZE]
[SIZE=2][FONT=Verdana] IF hBuffer:BUFFER-FIELD(iTmp):DATA-TYPE = "CHARACTER"[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] THEN PUT STREAM sOut UNFORMATTED '"' hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE(iTmp2) '"' {&Delim}. [/FONT][/SIZE]
[SIZE=2][FONT=Verdana] ELSE PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE(iTmp2) {&Delim}.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] END.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] END.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] PUT STREAM sOut SKIP.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana] hQuery:GET-NEXT().[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]END.[/FONT][/SIZE]
[FONT=Verdana][SIZE=2]/* cleanup and close */[/SIZE][/FONT]
[SIZE=2][FONT=Verdana]hQuery:QUERY-CLOSE().[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]DELETE OBJECT hBuffer.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]DELETE OBJECT hQuery.[/FONT][/SIZE]
[SIZE=2][FONT=Verdana]OUTPUT STREAM sOut CLOSE. [/FONT][/SIZE]
[SIZE=2][FONT=Verdana]END.[/FONT][/SIZE]