On Fri, 29 Oct 2004 14:07:56 -0700, you wrote:
>From the documentation:
>
>READU dyn.array.var FROM [file.var,] record.ID.expr [LOCKED statements]
>[ON ERROR statements] {THEN statements [END] | ELSE statements [END]}
>
>Am I reading this right? When I READU I can either have a THEN or an
>ELSE, but not both? (That it does not compile with both tends to
>confirm that...)
>
>At the moment I think I need both. :/ And I need to do the same thing in
>either case, so I ended up with:
>
>READU R.XBWU FROM F.XBWU, X.ONE.ID LOCKED
> CRT 'XBWU RECORD IS LOCKED, IGNORE IT'
>END THEN
> X.LOCKED = '1'
>END ;*END READU
>
>IF X.LOCKED = '1' THEN
> CRT 'OBTAINED LOCK ON XBWU RECORD'
> R.XBWU<XBWU.ASURITE> = X.ASURITE
> WRITE R.XBWU TO F.XBWU, X.ONE.ID ON ERROR
> IF STATUS() = 10 THEN
> ;* Either the ASURITE or USER.ID is duplicated
> X.ERROR = X.DUPLICATE.ON.WRITE
> END ;* IF STATUS
> END ;* END WRITE
>END ;* IF X.LOCKED
>
>Suggestions for improvement are welcome!
I don't know if this is an improvement, (actually I know that the
GOTO's in it will offend some people), but here's a snippet of code I
lifted directly from a routine that's heavily used in a Universe
multi-user environment:
ATTEMPTS = 0
READ.NAFILE.DB:
READU D.NAFILE.DB FROM F.NAFILE.DB, K.NAFILE.DB LOCKED
ATTEMPTS += 1
IF ATTEMPTS LT 50 THEN ; * About 20 Mins, (21:15)
CRT CLR22DOWN: "NAFILE.DB ": K.NAFILE.DB:
CRT " locked by ": STATUS(): ", (pausing before retry [":
ATTEMPTS: "]).":
CALL !SLEEP$(ATTEMPTS*1000)
CRT CLR22DOWN:
GOTO READ.NAFILE.DB:
END ELSE
ERROR.MSG = "Record locked and consequently skipped"
CALL @WSEQ("*** ERROR *** ": K.NAFILE.DB, F.RPT.1)
CALL @WSEQ(" ": ERROR.MSG, F.RPT.1)
CALL @WSEQ(" ": RAW.LINE, F.RPT.1)
CALL @WSEQ(" ", F.RPT.1)
CNT.LOCKED += 1
GOTO NEXT.INPUT.LINE:
END
END THEN
NULL
END ELSE
ERROR.MSG = "Record apparently deleted from database."
CALL @WSEQ("*** ERROR *** ": K.NAFILE.DB, F.RPT.1)
CALL @WSEQ(" ": ERROR.MSG, F.RPT.1)
CALL @WSEQ(" ": RAW.LINE, F.RPT.1)
CALL @WSEQ(" ", F.RPT.1)
RELEASE F.NAFILE.DB, K.NAFILE.DB
CNT.ABNORMAL += 1
GOTO NEXT.INPUT.LINE:
END
--
Allen Egerton
[EMAIL PROTECTED]
-------
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/