Please advice how to fix this or let us know if we can edit the code to work with two servers PROD and COB servers when we switch server on frontend
CODE:::::://**********************************************************************
// Event - clicked for cb_ok::u_cb
//
// Purpose - Logon to database
//
// Logic -
//
// Parameters - NONE
//
// Returns - (0) OK
//
// Date Who What
// --------- ---------- ----------------------------------------------
//
//***********************************************************************
long lhandle
SetPointer(HourGlass!) // look busy
lHandle = Handle(this)
// Local Variables
String This_Event, ls_errormsg
String S1, ls_appinifile
String win_sqls, regmain_sqls
string userid
string password
string server
string server_ptr
Integer Num
Integer I1
Long wait_counter, ll_errorcode
st_general_std logon_parms
n_cst_platform lnv_platform
This_Event = "Clicked(" + this.className() + ")"
// Determine frame
iw_Frame = gnv_app.of_GetFrame()
// *******************************************************************************
// tell the user what is going on.....
// *******************************************************************************
iw_Frame.SetMicroHelp("Logon Started, Please Wait...")
// Setup local variables
ls_AppIniFile = gnv_app.of_GetAppIniFile()
//*****************************************************************
// Retrieve Values
//*****************************************************************
dw_logon.AcceptText()
userid = dw_logon.GetItemString(1,'slogonid')
password = dw_logon.GetItemString(1, 'spassword')
IF Len(userid) > 0 AND Len(password) > 0 THEN
ELSE
SetForegroundWindow(lHandle)
gnv_app.inv_error.of_Message("Login Error", 'Please enter a logon id and a password', Stopsign!)
Return
END IF
server = dw_logon.GetItemString(1,'sServer')
server_ptr = server
//*****************************************************************
// setup database connection parameters
//*****************************************************************
// Encrypt the userid. The default is application id + user id (unless userprefix
// is stated). This allows the application to "hide" the prefix from the user,
// in case they go hacking into the ini file. Override this by overriding the
// of_encrypt function in descendant app. Note NEW APPS should use encryption
SQLCA.Logid = of_encrypt(userid)
SQLCA.LogPass = password
//SQLCA.servername =server ----------------(if we use this we are getting named pipe provider error so we have commented it )
SQLCA.servername ="mss-rd-p001-023.eur.nsroot.net,2431" ------------- SO we have hardcoded the listener here to make it work - temporary fix
SQLCA.DBMS = lower(trim(ProfileString(ls_AppIniFile, server_ptr, "dbms","")))
// If no DBMS set then generate an error and exit
IF len(SQLCA.DBMS) = 0 THEN
SetForegroundWindow(lHandle)
gnv_app.inv_error.of_message("INI File Error", "Could not find a DBMS value for:" + server + &
"~r~n" +&
"Please check your INI file (" + ls_AppIniFile + ")"&
,StopSign!)
iw_Frame.SetMicroHelp(gnv_app.iapp_object.microhelpdefault)
Return
END IF
// Set the sybase environment variables
IF ib_SetSybaseEnv THEN
f_SetPlatform(lnv_platform, TRUE)
lnv_platform.of_SetSybaseEnv(SQLCA.DBMS, server)
f_SetPlatform(lnv_platform, FALSE)
END IF
SQLCA.DataBase = ProfileString(ls_AppIniFile, server_ptr, "database","")
SQLCA.Lock = ProfileString(ls_AppIniFile, server_ptr, "lock","")
//*****************************************************************
// Determine auto-commit - check user preferences first in case of override
//*****************************************************************
IF NOT gnv_app.of_GetValue(server_ptr, "autocommit", S1 ) THEN
S1 = Upper(ProfileString(ls_AppIniFile, server_ptr, "autocommit",""))
END IF
Choose Case S1
Case "", "FALSE", "0", "NO"
SQLCA.AutoCommit = False
Case "TRUE", "1", "YES"
SQLCA.AutoCommit = True
End
This is actually super simple to implement in a PB App. For example....
SQLCA.DBParm="SvrFailover='Yes'" // Oracle or ASE DBMS
SQLCA.dbparm="FailoverPartner='<MirrorServerName>'" // SQL Server (SNC or MSO drivers)
Food for thought. HTH
Regards ... Chris
// Pseudo code
boolean connected = FALSE
int count = 0
DO WHILE (count < 5 AND NOT (connected))
count = count + 1
Test server 1
If server 1 is working then
connect to server 1
if success then connected = TRUE
else
Test server 2
if server 2 is working then
connect to server 2
if success then connected = TRUE
end if
end if
if NOT (connected)) then SLEEP (5)
NEXT