If you use DC_dbCloseArea() as a replacement for dbCloseArea() and DC_dbCloseAll() as a replacement for dbCloseAll() you should prevent these errors.
Code: Select all
FUNCTION DC_DbCloseAll()
LOCAL xValue, bError := ErrorBlock({||TrapError()})
LOCAL aRel[0], i, j
BEGIN SEQUENCE
WorkSpaceEval( {|a|a:=DbRList(),IIF(!Empty(a),AAdd(aRel,{Select(),a}),nil)})
FOR i := 1 TO Len(aRel)
FOR j := 1 TO Len(aRel[i,2])
(aRel[i,1])->(dbClearRelation())
NEXT
NEXT
xValue := dbCloseAll()
END SEQUENCE
ErrorBlock(bError)
RETURN xValue
* ----------------
FUNCTION DC_DbCloseArea()
LOCAL xValue, bError := ErrorBlock({||TrapError()})
LOCAL aRel[0], cAlias, i, j
BEGIN SEQUENCE
cAlias := '_' + Alias()
WorkSpaceEval( {|a|a:=DbRList(),IIF(!Empty(a),AAdd(aRel,{Select(),a}),nil)})
FOR i := 1 TO Len(aRel)
FOR j := 1 TO Len(aRel[i,2])
IF cAlias $ aRel[i,2,j]
(aRel[i,1])->(dbClearRelation())
ENDIF
NEXT
NEXT
xValue := dbCloseArea()
END SEQUENCE
ErrorBlock(bError)
RETURN xValue
* ----------------
STATIC FUNCTION TrapError
BREAK
RETURN nil