USE (_foxcode) AGAIN SHARED oVFPRS = NEWOBJECT("VFPRecordSet") ?"Field Names:" FOR nField = 1 TO oVFPRS.Fields.Count ?" ",oVFPRS.Fields.Item(nField).Name NEXT ? ?"First 20 'ABBREV' values:" oVFPRS.MoveFirst() FOR nRow = 1 TO 20 ?" ",oVFPRS.Fields.Item("Abbrev").Value oVFPRS.MoveNext() IF oVFPRS.EOF EXIT ENDIF NEXT USE RETURN ************************************************* ************************************************* ************************************************* DEFINE CLASS VFPRecordSet AS Custom ************************************************* PROTECTED nSelect nSelect = SELECT() ************************************************* Fields = NULL ************************************************* EOF = .F. PROCEDURE EOF_ACCESS() RETURN EOF(This.nSelect) ENDPROC ************************************************* BOF = .F. PROCEDURE BOF_ACCESS() RETURN BOF(This.nSelect) ENDPROC ************************************************* RecordCount = 0 PROCEDURE RecordCount_ACCESS() RETURN RECCOUNT(This.nSelect) ENDPROC ************************************************* PROCEDURE MoveFirst() GO TOP IN (This.nSelect) ENDPROC ************************************************* PROCEDURE MoveLast() GO BOTTOM IN (This.nSelect) ENDPROC ************************************************* PROCEDURE MoveNext() SKIP 1 IN (This.nSelect) ENDPROC ************************************************* PROCEDURE MovePrevious() SKIP -1 IN (This.nSelect) ENDPROC ************************************************* PROCEDURE Init(nSelect) IF EMPTY(nSelect) nSelect = SELECT() ENDIF This.nSelect = nSelect This.Fields = NEWOBJECT("VFPFields", "", "", nSelect) ENDPROC ENDDEFINE ************************************************* ************************************************* ************************************************* DEFINE CLASS VFPFields AS Custom ************************************************* PROTECTED nSelect nSelect = SELECT() ************************************************* PROTECTED oField oField = NULL ************************************************* Count = 0 FUNCTION Count_ACCESS RETURN FCOUNT(This.nSelect) ENDFUNC ************************************************* DIMENSION Item[1] PROCEDURE Item_ACCESS(nIndex) DO CASE CASE VARTYPE(nIndex) = "X" && NULL DIMENSION This.Item[This.Count] RETURN This.oField CASE VARTYPE(nIndex) = "C" && Field Name This.oField.Name = nIndex RETURN This.oField CASE VARTYPE(nIndex) = "N" && Field Number This.oField.Name = FIELD(nIndex) RETURN This.oField OTHERWISE RETURN NULL ENDCASE ENDPROC ************************************************* PROCEDURE Init(nSelect) This.nSelect = nSelect This.oField = NEWOBJECT("VFPField", "", "", nSelect) ENDPROC ENDDEFINE ************************************************* ************************************************* ************************************************* DEFINE CLASS VFPField AS Custom ************************************************* PROTECTED nSelect nSelect = 0 ************************************************* Name = "FieldName" ************************************************* Value = "" PROCEDURE Value_ACCESS() LOCAL nSelect, eValue nSelect = SELECT() SELECT (This.nSelect) eValue = EVALUATE(This.Name) SELECT (nSelect) RETURN eValue ENDPROC PROCEDURE Value_ASSIGN(eValue) LOCAL nSelect nSelect = SELECT() SELECT (This.nSelect) REPLACE (This.Name) WITH eValue SELECT (nSelect) ENDPROC ************************************************* PROCEDURE Init(nSelect) This.nSelect = nSelect ENDPROC ENDDEFINE