Get active database name at runtime
Posted in 2004
This is a multi-part message in MIME format. ------=_NextPart_000_000A_01C4B059.CB4D8690 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello, folks. I am currently writing a library function in 4gl for an application that = must run both in IDS and SE. Now, the function must perform some actions on a database but can be = called by several modules that open and work on other databases. Something like: ---begin module ---- DATABASE somedb DEFINE somerecord LIKE sometable.* MAIN --- do stuff --- CALL library_function(params) ---- do other stuff on somedb --- END MAIN ---end of module---- --- begin library module ---- DATABASE library DEFINE somerecord LIKE sometable.* FUNCTION library_function(params) DATABASE library # it won't work otherwise: it will be connected = to somedb! --- do stuff on library database RETURN somevalue END FUNCTION --- end library module --- Problem comes when after the return the application is connected to = library db, not the original one. Runtime error. In IDS there is a nice solution, using explicit database names in = selects in library_function (SELECT library:sometable ...)=20 but that won't work in SE (would it?). So I need a way to know what db is open when I call library_function: = the source will become --- begin library module ---- DATABASE library DEFINE somerecord LIKE sometable.* FUNCTION library_function(params) LET saved_database_name =3D GET_CURRENT_DB_NAME() DATABASE library # it won't work otherwise: it will be connected = to somedb! --- do stuff on library database DATABASE saved_database_name RETURN somevalue END FUNCTION --- end library module --- Any hint on the GET_CURRENT_DB_NAME function ? Thanks to all Andrea ------=_NextPart_000_000A_01C4B059.CB4D8690 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=3DContent-Type content=3D"text/html; = charset=3Diso-8859-1"> <META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial size=3D2>Hello, folks.</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>I am currently writing a library = function in 4gl=20 for an application that must run both in IDS and SE.</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Now, the function must perform some = actions=20 on a database but can be called by several modules that open and = work on=20 other databases.</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Something like:</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>---begin module ----</FONT></DIV> <DIV><FONT face=3DArial size=3D2>DATABASE somedb</FONT></DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>DEFINE somerecord LIKE=20 sometable.*</FONT></DIV>MAIN</FONT></DIV> <DIV><FONT face=3DArial size=3D2> --- do stuff = ---</FONT></DIV> <DIV><FONT face=3DArial size=3D2> CALL=20 library_function(params)</FONT></DIV> <DIV><FONT face=3DArial size=3D2> ---- do other stuff = on somedb=20 ---</FONT></DIV> <DIV><FONT face=3DArial size=3D2>END MAIN</FONT></DIV> <DIV><FONT face=3DArial size=3D2>---end of module----</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>--- begin library module = ----</FONT></DIV> <DIV><FONT face=3DArial size=3D2>DATABASE library</FONT></DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>DEFINE somerecord LIKE=20 sometable.*</FONT></DIV></FONT></DIV> <DIV><FONT face=3DArial size=3D2>FUNCTION = library_function(params)</FONT></DIV> <DIV><FONT face=3DArial size=3D2> DATABASE = library #=20 it won't work otherwise: it will be connected to somedb!</FONT></DIV> <DIV><FONT face=3DArial size=3D2> --- do stuff on = library=20 database</FONT></DIV> <DIV><FONT face=3DArial size=3D2> RETURN=20 somevalue</FONT></DIV> <DIV><FONT face=3DArial size=3D2>END FUNCTION</FONT></DIV> <DIV><FONT face=3DArial size=3D2>--- end library module ---</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Problem comes when after = the return the=20 application is connected to library db, not the original one. Runtime=20 error.</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>In IDS there is a nice solution, using = explicit=20 database names in selects in library_function (SELECT library:sometable = ...)=20 </FONT></DIV> <DIV><FONT face=3DArial size=3D2>but that won't work in SE (would = it?).</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>So I need a way to know what db is open = when I call=20 library_function: the source will become</FONT></DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>--- begin library module = ----</FONT></DIV> <DIV><FONT face=3DArial size=3D2>DATABASE library</FONT></DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>DEFINE somerecord LIKE=20 sometable.*</FONT></DIV></FONT></DIV> <DIV><FONT face=3DArial size=3D2>FUNCTION = library_function(params)</FONT></DIV> <DIV> LET saved_database_name =3D=20 GET_CURRENT_DB_NAME()</DIV> <DIV><FONT face=3DArial size=3D2> DATABASE = library #=20 it won't work otherwise: it will be connected to somedb!</FONT></DIV> <DIV><FONT face=3DArial size=3D2> --- do stuff on = library=20 database</FONT></DIV> <DIV> DATABASE saved_database_name</DIV> <DIV><FONT face=3DArial size=3D2> RETURN=20 somevalue</FONT></DIV> <DIV><FONT face=3DArial size=3D2>END FUNCTION</FONT></DIV> <DIV>--- end library module ---</DIV> <DIV> </DIV> <DIV>Any hint on the GET_CURRENT_DB_NAME function ?</DIV> <DIV> </DIV> <DIV>Thanks to all</DIV> <DIV> </DIV> <DIV>Andrea</DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial = size=3D2></FONT> </DIV></FONT></DIV></BODY></HTML> ------=_NextPart_000_000A_01C4B059.CB4D8690-- sending to informix-list