>FUNCTION NewModNumber > >LPARAMETERS tcTable, tcField > >LOCAL liModNumber >> >liModNumber = AssignModNumber( m.tcTable, m.tcField ) >REPLACE (m.tcField) WITH m.liModNumber >RETURN .T. > >endfunc >>
>*--------------------------------------------------------------------------- >function do_it() > > create cursor ppp (ppp I) > =afields(aa) > use > aa[1,10] = 'ValidateMyRecord()' > > create cursor ppp from array aa > select 999 && get off the alias > > insert into ppp values (2) > repl ppp with 500 in ppp >endfunc >*--------------------------------------------------------------------------- >function ValidateMyRecord() > > acti screen > ?'Called' > > repl ppp with 1000 > repl ppp with 1100 > repl ppp with 1200 > >endfunc >*--------------------------------------------------------------------------- >>
FUNCTION NewModNumber >> >>LPARAMETERS tcTable, tcField >> >>LOCAL liModNumber >> >>liModNumber = AssignModNumber( tcTable, tcField ) >>REPLACE ( tcField ) WITH liModNumber IN ( tcTable ) >> >>RETURN .T. >>** End NewModNumber >>>>I am getting the error "Illegal recursion in rule evaluation" when the REPLACE statement is executed.
*********************************** >>** from Craig Berntson's Knowledgebase - 8/24/99 >>** used to generate ModNumbers >>FUNCTION AssignModNumber >> >>LPARAMETERS tcTable, tcField >> >>LOCAL lnArea, liModNumber >> >>* Save current work area >>lnArea = SELECT() >> >>IF !USED("GeneratePK") >> USE sagenpk IN 0 SHARED ALIAS GeneratePK >>ENDIF >>SELECT GeneratePK >>SET ORDER TO TAG GPK_PK >> >>* FLOCK seems to work a bit better than RLOCK. >>* I've never had a problem with it >>DO WHILE !FLOCK() >>ENDDO >> >>SEEK UPPER(tcTable) >>IF FOUND() >> REPLACE gpk_CurrentModNumber WITH gpk_CurrentModNumber + 1 >> liModNumber = gpk_CurrentModNumber >>ELSE >> INSERT INTO GeneratePK ( GPK_PK, gpk_CurrentNumber, gpk_CurrentModNumber ) ; >> VALUES ( UPPER( tcTable ), 0, 1 ) >> liModNumber = 1 >>ENDIF >> >>FLUSH >>UNLOCK >> >>SELECT (lnArea) >>RETURN liModNumber >>** End AssignModNumber >>>>