It is remarkably difficult to show a Windows message box in GAMS and react on it at execution time:
$onecho > q.vbs
Select Case MsgBox("No data for ID=" & WScript.Arguments.Item(0) & " Continue?",4,"Database Error")
Case vbYes
returnValue = 1
Case vbNo
returnValue = 0
End Select
WScript.Quit(returnValue)
$offecho
set
errorID(*) 'dynamic set with error IDs'
;
* assume we have an error
errorID('myErrorId') = yes;
scalars
rc 'return code' /0/
first /1/
;
* I don't want to put out anything, but this $%!%@$$#! put_utility requires it
file dummy /xx/;
put dummy;
loop(errorID$first,
put_utility 'exec' / 'cscript //nologo q.vbs ' errorID.tl;
rc = ErrorLevel;
first=0;
);
display rc;
I always cringe when I need to use this dreaded put_utility.
Background: in theory database systems can be designed such that data is always consistent. In practice almost all databases contain data problems. Somehow when doing optimization models we hit these errors more often than other db applications. This code is related to a larger model where we need to react on detecting some form of db error, i.e. stop or try to fix and continue.