>>********************************************************* >>* Sample of passing cursor between two VFP (data)sessions >>* Author Djordjevic Srdjan >>********************************************************* >>*. >>*use ...\data\customers.dbf in 0 shared ... >>*. >> >>&&Instead of above you already hv your cursor prepared with all data in it >> >>local oCursor >> >>oCursor = cur2obj( 'YouRepCursor' ) &&call to storing function (Amend cursor name accordingly) >> >>local oBo >>oBo=createobject('DataSessionToPrintOnly') >>oBo.consume_data(oCursor) >> >> >>****** Test Session (private) >>define class DataSessionToPrintOnly as session >> >> procedure init >> set deleted on >> >> procedure consume_data >> lparameters oCursor >> =obj2cur( oCursor ,'repCursor') && call to restoring function >> browse normal >> go top >> &&Call yr report from here >> report form ... >> >>enddefine >> >> >>************************************************************************ >>* Store Cursor to object. >>* In fact, Creates Parser object and tells him to >>* suck in cursor and then returns it all back to caller. >>* Accepts 3 parameters for source alias , 'for' and 'while' conditions >>************************************************************************ >>function cur2obj >> lparameters cAlias,cForCondition,cWhileCondition >> local oTable,sv_alias >> >> sv_alias=alias() >> select (cAlias) >> >> oTable=createobject('table_parser') >> oTable.cur2obj(cAlias,cForCondition,cWhileCondition) >> >> select (sv_alias) >> return oTable >> >> >> >>****************************** >>* Restore Cursor from object >>****************************** >>function obj2cur >> lparameters oTable,cAlias >> >> create cursor &cAlias from array oTable.arrstru >> >> if oTable.NumberOfRecords = 0 >> return >> endif >> >> append from array oTable.arrdata >> >> if oTable.MemoCount=0 >> go top >> return >> endif >> >> local nMemoRec, cMemoName, cMemoContent , i , j >> j=0 >> for i=1 to oTable.FieldsCount >> if oTable.arrstru(i,2) = 'M' >> j = j + 1 >> cMemoName = cAlias+'.' + oTable.arrstru(i,1) >> replace &cMemoName with oTable.arrmemo(recno(),j) all >> endif >> next >> >> go top >> return >> >>*********************************** >>* Custom Object used as >>* cursor carrier >>*********************************** >>define class table_parser as custom >> OriginalAlias='' >> NumberOfRecords=0 >> MemoCount=0 >> FieldsCount=0 >> >> declare arrstru(1) >> declare arrdata(1) >> declare arrmemo(1) >> >> >> procedure cur2obj >> lparameters cAlias,cForCondition,cWhileCondition >> local lcArrStru,sv_rec >> >> select (cAlias) >> go top >> >> this.OriginalAlias = cAlias >> declare lcArrStru(1) >> >> =afields(lcArrStru) >> acopy(lcArrStru,this.arrstru) >> >> this.MemoCount = this.count_memo_fields() >> >> if eof() >> this.NumberOfRecords=0 >> return >> endif >> >> if type('cForCondition') <> 'C' >> cForCondition = ' .t. ' >> endif >> >> if type('cWhileCondition') <> 'C' >> cWhileCondition = ' .t. ' >> endif >> >> create cursor tmpCursor from array this.arrstru >> select (cAlias) >> scan for &cForCondition while &cWhileCondition >> scatter memvar memo >> insert into tmpCursor from memvar >> endscan >> >> select tmpCursor >> go top >> >> if eof() >> use >> return >> endif >> this.NumberOfRecords=reccount() >> >> if this.MemoCount > 0 >> >> local i,j,cMemoName,nMemoRec >> declare this.arrmemo( this.NumberOfRecords , this.MemoCount ) >> >> scan >> nMemoRec=recno() >> j=0 >> for i=1 to alen(lcArrStru,1) >> if lcArrStru(i,2) = 'M' >> cMemoName = 'tmpCursor.' + lcArrStru(i,1) >> j = j + 1 >> this.arrmemo(nMemoRec,j)= &cMemoName >> endif >> next >> endscan >> >> endif >> >> declare this.arrdata(this.NumberOfRecords, this.FieldsCount ) >> copy to array this.arrdata >> use >> >> >> >> procedure count_memo_fields >> this.FieldsCount=alen(this.arrstru,1) >> >> local i,j >> j=0 >> for i=1 to alen(this.arrstru,1) >> if this.arrstru(i,2) = 'M' >> j=j+1 >> endif >> next >> return j >> >> >> >> >>enddefine >>******************************** >>>>