>If ( no cascadeparent or (cascasdeparent <> Contacts) ) > If ( indexexpr changed ) > check relation > endif >endif >>
>>******************************************************************************** >>procedure __RI_UPDATE_calls >>** "Referential integrity update trigger for" calls >>LOCAL llRetVal >>llRetVal = .t. >>PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID >>PRIVATE pcParentExpr,pcChildExpr >>STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr >>STORE 0 TO pnParentRec,pnChildRec >>IF _triggerlevel=1 >> BEGIN TRANSACTION >> PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; >> pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC >> pcOldTalk=SET("TALK") >> SET TALK OFF >> pcOldDele=SET("DELETED") >> pcOldExact=SET("EXACT") >> pcOldCompat=SET("COMPATIBLE") >> SET COMPATIBLE OFF >> SET DELETED ON >> SET EXACT OFF >> pcRIcursors="" >> pcRIwkareas="" >> pcRIolderror=ON("error") >> pnerror=0 >> ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) >> IF TYPE('gaErrors(1)')<>"U" >> release gaErrors >> ENDIF >> PUBLIC gaErrors(1,12) >> pcOldDBC=DBC() >> SET DATA TO ("CONTACTS") >>ENDIF first trigger >>LOCAL lcParentID && parent's value to be sought in child >>LOCAL lcOldParentID && previous parent id value >>LOCAL lcChildWkArea && child work area handle returned by riopen >>LOCAL lcChildID && child's value to be sought in parent >>LOCAL lcOldChildID && old child id value >>LOCAL lcParentWkArea && parentwork area handle returned by riopen >>LOCAL lcStartArea >>lcStartArea=select() >>llRetVal=.t. >>lcChildWkArea=select() >>IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="CONTACTS") >> SELECT (lcChildWkArea) >> lcChildID=CONTACT_ID >> lcOldChildID=oldval("CONTACT_ID") >> pcChildDBF=dbf(lcChildWkArea) >> pnChildRec=recno(lcChildWkArea) >> pcChildID=lcOldChildID >> pcChildExpr="CONTACT_ID" >> IF lcChildID<>lcOldChildID >> lcParentWkArea=riopen("contacts","contact_id") >> IF lcParentWkArea<=0 >> IF _triggerlevel=1 >> DO riend WITH .F. >> ENDIF at the end of the highest trigger level >> SELECT (lcStartArea) >> RETURN .F. >> ENDIF not able to open the child work area >> pcParentDBF=dbf(lcParentWkArea) >> llRetVal=SEEK(lcChildID,lcParentWkArea) >> pnParentRec=recno(lcParentWkArea) >> =rireuse("contacts",lcParentWkArea) >> IF NOT llRetVal >> pnError = rierror(-1,"Insert restrict rule violated.","","") >> IF _triggerlevel=1 >> DO riend WITH llRetVal >> ENDIF at the end of the highest trigger level >> SELECT (lcStartArea) >> RETURN llRetVal >> ENDIF no parent >> ENDIF this value was changed >>ENDIF not part of a cascade from "contacts" >>lcParentWkArea=lcChildWkArea >>IF _triggerlevel=1 >> do riend with llRetVal >>ENDIF at the end of the highest trigger level >>SELECT (lcStartArea) >>RETURN llRetVal >>** "End of Referential integrity Update trigger for" calls >>>>