loObj = CREATEOBJECT("Empty") ADDPROPERTY(m.loObj, "id", 1) ADDPROPERTY(m.loObj, "name", "test") ADDPROPERTY(m.loObj, "bdate", DATE(1980, 1, 1)) IF CreateCursorFromObject(m.loObj, 'test') SELECT test BROWSE ENDIF *!* A very simple cursor from object function *!* not contain field width / error handler FUNCTION CreateCursorFromObject(toObject, tcCursor) LOCAL ARRAY laFields[1] LOCAL i, lcFields, lcField, lvValue, lcType, lcTemp, lnPos, lnLen, lnDec lcFields = "" FOR i = 1 TO AMEMBERS(laFields, m.toObject) lcField = m.laFields[m.i] lvValue = EVALUATE("m.toObject." + m.lcField) lcType = VARTYPE(m.lvValue) lcFields = m.lcFields + "," + m.lcField + " " + m.lcType DO CASE CASE m.lcType == "C" lcFields = m.lcFields + "(" + LTRIM(STR(LEN(m.lvValue))) + ")" CASE m.lcType $ "NY" lcTemp = TRANSFORM(m.lvValue) lnLen = LEN(m.lcTemp) lnPos = AT(".", m.lcTemp) IF m.lnPos > 0 lnDec = m.lnLen - m.lnPos - 1 lnLen = m.lnLen - m.lnDec - 1 lcFields = m.lcFields + "(" + LTRIM(STR(m.lnLen)) + "," + LTRIM(STR(m.lnDec)) + ")" ELSE lcFields = m.lcFields + "(" + LTRIM(STR(m.lnLen)) + ")" ENDIF CASE m.lcType $ "DT" ENDCASE ENDFOR IF !EMPTY(m.lcFields) m.lcFields = TRIM(SUBSTR(m.lcFields, 2)) CREATE CURSOR (m.tcCursor) ( &lcFields. ) APPEND BLANK GATHER NAME m.toObject ENDIF RETURN USED(m.tcCursor) ENDFUNC