LOCAL lcFields, lcValues, lcTable, lnFields, lnI, lcOutput LOCAL ARRAY laFields[1] CLOSE DATABASES ALL #define CRLF CHR(13) + CHR(10) CREATE CURSOR csrTables(TableName C(20)) INSERT INTO csrTables VALUES ('ItemTreeLog') INSERT INTO csrTables VALUES ('WebPages') lcOutput ='' lcTable = ALLTRIM(TableName) SCAN USE (m.lcTable) IN 0 ALIAS WorkTable lnFields = AFIELDS(laFields, 'WorkTable') STORE '' TO lcFields, lcValues FOR lnI = 1 TO lnFields lcFields = m.lcFields + IIF(EMPTY(m.lcFields),'',', ') + CRLF + laFields(m.lnI,1) lcValues = m.lcValues + IIF(EMPTY(m.lcValues),'',', ') + CRLF + '?' + m.lcTable + '.' + laFields(m.lnI,1) NEXT TEXT TO lcOutput TEXTMERGE NOSHOW additive USE <<m.lcTable>> SCAN <<'TEXT'>> TO lcInsert NOSHOW INSERT INTO <<m.lcTable>> ( <<m.lcFields>> ) VALUES (<<m.lcValues>> ) END<<'TEXT'>> SQLCONNECT(hConn, m.lcInsert) ENDSCAN ENDTEXT USE IN SELECT('WorkTable') SELECT csrTables lcTable = ALLTRIM(csrTables.TableName) ENDSCAN _cliptext = m.lcOutput *** OUTPUT *** USE WebPages SCAN TEXT TO lcInsert NOSHOW INSERT INTO WebPages ( VERSION, FILENAME, CONTENTS ) VALUES ( ?WebPages.VERSION, ?WebPages.FILENAME, ?WebPages.CONTENTS ) ENDTEXT SQLCONNECT(hConn, m.lcInsert) ENDSCAN USE ItemTreeLog SCAN TEXT TO lcInsert NOSHOW INSERT INTO ItemTreeLog ( DATE_TIME, METHOD, MESSAGE, SALESPOINT, OPERATOR, CODE, LONGMSG ) VALUES ( ?ItemTreeLog.DATE_TIME, ?ItemTreeLog.METHOD, ?ItemTreeLog.MESSAGE, ?ItemTreeLog.SALESPOINT, ?ItemTreeLog.OPERATOR, ?ItemTreeLog.CODE, ?ItemTreeLog.LONGMSG ) ENDTEXT SQLCONNECT(hConn, m.lcInsert) ENDSCAN>>>I agree with everything you are saying. And just for the heck of it (even though VFP does not recommend) I will try to use TEXTMERGE within TEXTMERGE just to see what comes out. Stay tuned.