Validar conexión base datos sin cargar ventana principal

HMG en Español

Moderator: Rathinagiri

Post Reply
jparada
Posts: 430
Joined: Fri Jan 23, 2009 5:18 pm

Validar conexión base datos sin cargar ventana principal

Post by jparada »

Hola,
Estoy intentando validar que si no es posible conectar con el servidor sql, despliegue el mensaje de error de conexión y termine el programa, lo intento en el evento ON INIT, pero si hay error no termina el programa, lo que sucede es que carga la ventana principal.

Este es el ejemplo:

Code: Select all

#include "hmg.ch"

#xcommand TRY  => BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS

FUNCTION MAIN

   DEFINE WINDOW Form_1; 
      AT 0,0; 
      WIDTH 1200;
      HEIGHT 700;
      ON INIT Conectar();
      MAIN
   
    END WINDOW
   
   CENTER WINDOW Form_1
   ACTIVATE WINDOW Form_1
   
RETURN NIL


FUNCTION Conectar()
   LOCAL oCnn
   LOCAL oErr

   IF ( oCnn := win_OleCreateObject( "ADODB.Connection" ) ) == NIL
      MsgStop( "No es posible crear objeto conexión " + win_OleErrorText() )
      RETURN NIL   
   ENDIF
   
   TRY    
      oCnn:Open( "Provider=SQLNCLI11;Server=server;Database=database;Uid=user;Pwd=pass;" )
   CATCH oErr
      MsgStop( "Error al intentar conectar a la base de datos " +  e"\n" + hb_StrToUtf8(oErr:Description) )
      RETURN NIL
   END
  
RETURN NIL
Alguna idea de cómo implementar lo que se requiere?.

Gracias.

Saludos,
Javier
User avatar
luisvasquezcl
Posts: 1258
Joined: Thu Jul 31, 2008 3:23 am
Location: Chile
Contact:

Re: Validar conexión base datos sin cargar ventana principal

Post by luisvasquezcl »

hola, llama la funcion conectar antes del define window y valida con un if si no es nil abre ventana prncipal
por ejemplo
if conectar()《》nil
define window
endif
espero te sea de ayuda.
salu2
jparada
Posts: 430
Joined: Fri Jan 23, 2009 5:18 pm

Re: Validar conexión base datos sin cargar ventana principal

Post by jparada »

Hola Luis,
Gracias por tu ayuda, al parecer funciona bien.

Code: Select all

#include "hmg.ch"

#xcommand TRY  => BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS

FUNCTION MAIN
   LOCAL oServer
   
   IF ( oServer := Conectar() ) != NIL

      DEFINE WINDOW Form_1; 
         AT 0,0; 
         WIDTH 1200;
         HEIGHT 700;         
         MAIN

      END WINDOW
      CENTER WINDOW Form_1
      ACTIVATE WINDOW Form_1
   
   ENDIF // FIN CONECTAR
   
RETURN NIL


FUNCTION Conectar()
   LOCAL oServer := NIL   
   LOCAL oErr
   LOCAL cConString

   cConString := "Provider=SQLNCLI11;Server=server;Database=database;Uid=user;Pwd=pwd;"
   
   TRY
      oServer := win_OleCreateObject( "ADODB.Connection" )
   CATCH oErr
      MsgStop( "No es posible crear objeto conexión " + win_OleErrorText() )
      RETURN NIL
   END   

   TRY
      oServer:Open( cConString )
   CATCH oErr
      MsgStop( "Error al intentar conectar a la base de datos " +  e"\n" + hb_StrToUtf8(oErr:Description) )
      RETURN NIL
   END
  
RETURN oServer
Saludos,
Javier
Post Reply