Power Builder - Estabilizar conexion a la Base de Datos

 
Vista:
Imágen de perfil de Antonio
Val: 33
Ha disminuido su posición en 6 puestos en Power Builder (en relación al último mes)
Gráfica de Power Builder

Estabilizar conexion a la Base de Datos

Publicado por Antonio (1247 intervenciones) el 08/12/2017 02:58:34
Un saludo a todos...

Necesito de su experiencia y aportaciones..

Resulta que tengo un aplicativo multiusuarios en una red, y lo que pasa, es que cuando se pierde la señal o la comunicación con la base de datos obviamente no pueden guardar la información que en ese momento están capturando.

¿Alguien tienen alguna idea o un tip para realizar la reconexion y luego darle un update al datawindow y que se guarde la información?

la base de datos que utilizo es MySQL, pero el procedimiento lo necesito también para SQL Server.

Espero haberme explicado...

Les agradezco muchísimo sus aportaciones.

Gracias,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Leonardo Daniel A.
Val: 858
Oro
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Estabilizar conexion a la Base de Datos

Publicado por Leonardo Daniel A. (376 intervenciones) el 11/12/2017 17:35:27
Hola pues la unica que se me ocurre.... es crear una funcion que se llame conectarBD que te regrese un boolean si se conecto o no... y si se conecto realizar el update y asi te aseguras que cada vez que quiera actualizar, primero se conecte...

funcion f_conectarBD (SQL Server) regresa boolean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQLCA.DBMS = "OLE DB"
SQLCA.LogId = "usuario"
SQLCA.LogPass = "password"
SQLCA.AutoCommit = False
SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='" + s_ipservidor + "',PROVIDERSTRING='database='MiBD''"
connect using sqlca;
 
 
if sqlca.SQLCode = 0 then
   return true
elseif sqlca.SQLCode = -1 then
   f_mensaje("E", "No hay conexion a la B.D." + ln + sqlca.SQLErrText  )
   return false
end if



y a la hora de hacer el update, primero verificar si hay conexion... en mi caso yo tengo un DW_PADRE que tiene las funciones generales, en caso del of_guardar... hace el acceptText, la funcion update si no regresa -1 es que todo esta bien..regresa true, si no es si, dice que no se guardaron los datos y regresa false, y hago el commit para confirmar los cambios si se puede actualizar, o el rollback para deshacer los cambios en caso de que no se pueda guardar, como vez, todo lo manejo en esas funciones y me ahorro codigo

Boton o UserEvent Guardar
1
2
3
4
5
6
7
8
9
if f_conectarBD() then
   if dw_clientes.of_guardar() then
      commit;
   else
      rollback;
   endif
else
    return
end if


funcion of_guardar - regresa boolean
1
2
3
4
5
6
7
8
9
10
11
12
boolean lb_valor
 
if AcceptText() = 1 then
   if Update() = 1 then
      lb_valor = true
      ib_modificado = false
   else
      f_mensaje("A", "Data not saved")
      lb_valor = False
   end if
end if
return lb_valor

puedes ver la variable ib_modificado, es una variable a nivel del DW...la cual se pone en True en el evento ItemChanged... para cuando presiono el boton nuevo o cerrar, verifico si ya se guardo esa informacion...y si guardan correctamente se pone en False.. para que ya no pregunte si deseas perder los cambios

1
2
3
4
if dw_clientes.ib_modificado = false then
   f_mensaje("No se han guardado los cambios")
   return
end if

bueno en realidad hago una pregunta, que si desea perder los cambios, si es si, pues hago el dw_clientes.of_agregar(), o un return en caso de que no quieran perder y presionen guardar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar