I’d like to be able to:
make an update in one database without issusing an ET,
then switch to a second database using USR1040N,
then make an update in the second database,
then issue an ET against the second database only,
then return to the first database using USR1040N again,
then backout the update to the frist database if desired.
The “ET” profile parameter supposedly provides this capability when set to “OFF”, but in my testing I find it has no effect. An end transaction issued against one database seems to always affects the other one regardless of the settting of the “ET” profile parameter.
What could be wrong? I’m running Nat 4.1.3 and ADABAS 7.4.2 on a VSE mainframe platform; any info you can give me would be greatly appreciated.
Possible settings ON END TRANSACTION and BACKOUT TRANSACTION statements are executed for all databases which have been referenced since the beginning of the Natural session or since the last execution of an END TRANSACTION and BACKOUT TRANSACTION statement.
OFF END TRANSACTION and BACKOUT TRANSACTION statements are executed only for the databases affected by the transaction (and - if applicable - for the database to which transaction data are written).
ET OFF does NOT mean that ETs are issued only for the current database. It means that “affected databases” have ETs issued. A database which has had a record updated (as in your example) is an “affected database”.
This is more of a performance parameter than a functionality “thing”. If I read records from three databases, then update a record in one database. there is no need to issue four ET commands, one will suffice.
I think Wolfgang was eluding to the fact that many things can be done using direct calls that aren’t directly available from Natural, like doing the selective ET.
If you take the example source for USR1043 from SYSEXT and modify it to have something like:
/* Reset all binary fields and fill control block, ...
/*
RESET CB-DBID CB-FNR CB-RSP CB-ISN CB-ISL CB-ISQ CB-FBL
CB-RBL CB-SBL CB-VBL CB-IBL CB-RESERVED
/*
CB-CMD := 'ET' /* ET Command
CB-RSP := 999 /* This is where you specify the DBID
/*
CALLNAT 'USR1043N'
CONTROL-BLOCK
FORMAT-ADDR
RECORD-ADDR
SEARCH-ADDR
VALUE-ADDR
ISN-ADDR
RESPONSE
/*
IF RESPONSE NE 0
WRITE 'ADABAS response code:' RESPONSE
END-IF
/*
END
I didn’t try this so I can’t guarantee it, but the idea is there… hopefully it’s close. AFAIK file level ET can’t be done.