IF EMPTY(DBC()) OPEN DATABASE ? IF EMPTY(DBC()) RETURN .f. ENDIF ENDIF CLEAR ? CLOSE TABLES ALL LOCAL lnRetVal, laFields[1], lcString, lnI, lcExpr lnRetVal = ADBOBJECTS(laTables,"TABLE") FOR EACH lcTable IN laTables lcTag = DBGETPROP(lcTable,"TABLE","PrimaryKey") IF EMPTY(lcTag) LOOP ENDIF USE (lcTable) lcKey = KEY(TAGNO(lcTag)) lcExpr = lcKey USE IF EMPTY(STREXTRACT(lcKey, "(", ")", 1)) lcKey = CHRTRAN(lcKey, [+ ], []) ? [Table:], lcTable, [--], lcExpr ? LOOP ENDIF lcKey = [+] + lcKey + [+] lnI = 1 laFields = [] DO WHILE NOT EMPTY(lcKey) lcString = STREXTRACT(lcKey, "+", "+", 1) lcKey = STRTRAN(lcKey, "+" + lcString + "+", []) IF NOT EMPTY(lcKey) lcKey = "+" + lcKey ENDIF IF NOT EMPTY(lcString) lcString = GetFieldName(lcString) DIMENSION laFields[lnI] laFields[lnI] = lcString ELSE EXIT ENDIF lnI = lnI + 1 ENDDO ? [Table:], lcTable, [--], lcExpr FOR EACH lcField IN laFields ? lcField ENDFOR ? ENDFOR PROCEDURE GetFieldName LPARAMETERS tcString LOCAL lcName, lnI, lnAt lnI = OCCURS("(", tcString) tcString = STREXTRACT(tcString, "(", ")", lnI) lnAt = AT(",", tcString) IF lnAt > 1 tcString = SUBSTR(tcString, 1, lnAt - 1) ENDIF RETURN ALLTRIM(tcString) ENDPROC