Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
VFP 8+ Wish list.
Message
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
00697123
Message ID:
00705526
Views:
16
> If I SCATTER NAME oRecords, and then pass oRecords to some
function in VFP, I still have to have a GATHER statment somewhere
to save the changes, but if could create an ADO recordset,
and I passed that recordset to VB, then VB can do what it wants
with the data set, including update and use transactions.


Kevin,

What if you made your own VFP Recordset class that is a wrapper for a VFP cursor. You could then just pass the wrapper object to VB and it could manipulate the cursor directly, without having to convert it to and from an ADO recordset. It wouldn't be ADO, but you could simulate ADO functionality. You could even add extra functionality not included with ADO.

Here's a sample to demonstrate the concept:
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
Previous
Reply
Map
View

Click here to load this message in the networking platform