Odds and Ends
May 31, 2002 Timothy Prickett Morgan
As requested, here are more short tips that don’t qualify as tips in their own right, for whatever reasons. I hope you find something useful.
Is it possible for an initial program to determine if the user who is running it is already signed on with another session?
Yes, attempt to allocate an object with an exclusive lock. If the user is already signed on elsewhere, the allocation should fail.
Here is some example code to get you started.
DCL &USER *CHAR 10 DCL &LIB *CHAR 10 VALUE(QGPL) MONMSG MSGID(CPF0000) EXEC(GOTO ENDPGM) RTVUSRPRF RTNUSRPRF(&USER) /* create a data area, if it doesn't already exist */ CRTDTAARA DTAARA(&LIB/&USER) TYPE(*LGL) MONMSG MSGID(CPF1023) /* Attempt to allocate the directory */ ALCOBJ OBJ((&LIB/&USER *DTAARA *EXCL)) WAIT(0) MONMSG MSGID(CPF1002 CPF1085) EXEC(DO) /* user is already signed on -- do whatever */ GOTO SKIP ENDDO /* Call program if user is not signed on elsewhere */ CALL SOMEPGM SKIP: ENDPGM: ENDPGM
I wrote a Qshell script and keyed it in to a file in my home directory of the OS/400 IFS. When I try to run the script, I get error message 001-0019 (Error found searching for command myscript.qsh. No such path or directory). Yet the List directory contents (ls) Qshell command and the OS/400 Work with Links (WRKLNK) command show that the file is there. Why won’t Qshell run my script?
For some reason, you do not have permission to execute the file. I have run into this occasionally. For example, if you have a Qshell command create the file, it may not have the executable attribute set.
Use the Change Mode (chmod) command to make the file executable.
chmod +x myscript.qsh
How do I make Query/400 print leading zeros for a numeric customer number field?
From the Define the Query panel, place a number 1 beside the Specify report column formatting option and press the Enter key. Position the cursor to the customer number field and press F16 to specify editing. For the Editing option, choose 1 (Numeric editing choices). Change the Replace leading zeros entry to Y. You may also want to change the Decimal point and Thousands separators to 5 (None).
Our AS/400 nightly backup usually fits on one cartridge tape, but occasionally goes over
to a second. Once it does, the tape in TAP01 ejects as designed. Subsequent commands in this backup job–the Save Configuration (SAVCFG) command and the Save Security Data (SAVSECDTA) command–have TAP01 and TAP02 devices specified, but under this circumstance, the job issues inquiry message CPA4086 (device TAP01 not ready) and waits for operator intervention. Since CPA4086 is an inquiry message, I cannot monitor for it.
Can you help explain and offer suggestions as to how to use TAP02 on subsequent SAV* commands in the same job if and only if TAP01 is filled?
Run the Check Tape (CHKTAP) command with ENDOPT(*LEAVE) after the first save finishes. If TAP01 has unloaded, you’ll get escape message CPF6760. If you get the escape message, do subsequent saves to TAP02.
Advanced Systems Concepts
SEQUEL meets all your iSeries and AS/400 data access needs in a single, integrated solution:
Take 6 minutes to
For more information or a FREE trial of SEQUEL,