RecordSet 4: Roll Your Own RecordSet

<< Click to Display Table of Contents >>

Navigation:  Examples > RecordSet >

RecordSet 4: Roll Your Own RecordSet

Previous pageReturn to chapter overviewNext page

This sample shows you how you can create a recordset on the fly and how you can save and load recordsets to disk in XML format

It finally shows how you can check if a recordset supports certain options

 

FUNCTION Start()

 // This sample shows how you can create your own recordset

 // And also hwo you can save and load recordsets to an XML file

 LOCAL oRs AS AdoRecordSet

 LOCAL aFields AS ARRAY

 LOCAL i AS LONG

 oRs := AdoRecordSet{}

 IF ! File("TEST.XML")

 oRs:Fields:Append("F1",adInteger,NIL,adFldRowId)

 oRs:Fields:Append("F2",adVarChar,10,adFldMayBeNull)

 oRs:Fields:Append("F3",adBoolean,NIL,adFldMayBeNull)

 oRs:Fields:Append("F4",adDbDate,NIL,adFldMayBeNull)

 oRs:Fields:Append("F5",adDouble,NIL,adFldMayBeNull)

 aFields := {"F1","F2","F3","F4","F5"}

 oRs:Open(NIL,NIL,adOpenStatic,adLockOptimistic,-1)

 FOR i = 1 TO 50

         oRs:AddNew(aFields, {I,CHR(64+I%26),I%2=0,TODAY()+i,SQRT(i)})

 NEXT

 oRs:Save("test.xml",adPersistXML)

 ? "New recordset created"

 ELSE        

 oRs:Open("test.xml","Provider=MSPERSIST",AdOpenStatic,;

         adLockOptimistic,NIL)

 ? "Recordset loaded from test.xml"

 ENDIF

 ? "# of fields", oRs:Fields:Count

 ? "# of records",oRs:RecordCount

 wait

 ? "Recordset supports:"

 ? "AddNew           ", oRs:Supports(adAddNew)

 ? "Approx Position  ", oRs:Supports(adApproxPosition)

 ? "Bookmark         ", oRs:Supports(adBookmark)

 ? "Delete           ", oRs:Supports(adDelete)

 ? "Find             ", oRs:Supports(adFind)

 ? "HoldRecords      ", oRs:Supports(adHoldRecords)

 ? "Index            ", oRs:Supports(adIndex)

 ? "MovePrevious     ", oRs:Supports(adMovePrevious)

 ? "Notifications    ", oRs:Supports(adNotify)

 ? "Resync           ", oRs:Supports(adResync)

 ? "Seek             ", oRs:Supports(adSeek)

 ? "Update           ", oRs:Supports(adUpdate)

 ? "Updatebatch      ", oRs:Supports(adUpdateBatch)

 wait

 ? "Display the contents of the recordset"

 oRs:MoveFirst()

 DO WHILE ! oRs:EOF

 QOut()

 FOR i := 1 TO oRs:Fields:Count

         QQOut(oRs:FIELDs[i]:Value,"")

 NEXT

 oRs:MoveNext()

 ENDDO

 wait