14 de marzo de 2005

Leyendo Servidores SQL Server con el API ODBC

Existen diversas formas de saber cuales son los Servidores SQL Server disponibles, una de ellas, es la que comento a continuación; utilizando el API del ODBC.

*
*********************************************************************************************
* Ejemplo básico, de como leer servidores disponibles de SQL Server por medio del ODBC API. *
*********************************************************************************************
*

* REFERENCIA GENERAL: MSDN ODBC Programmer's Reference
*
= ServidoresSQLDisponibles( )
*

PROCEDURE ServidoresSQLDisponibles( )
  *
  * Constantes.
  *
  #DEFINE V_SQL_HANDLE_ENV      1
  #DEFINE V_SQL_HANDLE_DBC     2
  #DEFINE V_SQL_ODBC_VERSION  200  #DEFINE V_SQL_ODBC3              3
  #DEFINE V_SQL_DATO                99  #DEFINE V_TRAMA_TAMANO        2048  #DEFINE V_SQL_DRIVER             "DRIVER=SQL SERVER"
  *
  **********************
  * Declaraciones API. *
  **********************
  *
  * REFERENCIA API:
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcSQLBrowseConnect.asp
  *
  DECLARE SHORT SQLBrowseConnect IN ODBC32 ;
  INTEGER ConnectionHandle, ;
  STRING InConnectionString, ;
  INTEGER StringLength1, ;
  STRING @ OutConnectionString, ;
  INTEGER BufferLength, ;
  INTEGER @ StringLength2Ptr
  *
  * REFERENCIA API:
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcsqlallochandle.asp
  *
  DECLARE SHORT SQLAllocHandle IN ODBC32 ;
  INTEGER HandleType, ;
  INTEGER InputHandle, ;
  INTEGER @ OutputHandlePtr
  *
  * REFERENCIA API:
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcsqlfreehandle.asp
  *
  DECLARE SHORT SQLFreeHandle IN ODBC32 ;
  INTEGER HandleType, ;
  INTEGER Handle
  *
  * REFERENCIA API:
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcsqlsetenvattr.asp
  *
  DECLARE SHORT SQLSetEnvAttr IN ODBC32 ;
  INTEGER EnvironmentHandle, ;
  INTEGER Attribute, ;
  INTEGER ValuePtr, ;
  INTEGER StringLength
  *
  **********************
  * CÓDIGO DE EJEMPLO. *
  **********************
  *
  LOCAL lnIndi, lnIOHandle, lnCX, lnLongitudSalida
  LOCAL lcEntrada, lcSalida
  LOCAL ARRAY laServidores[1]
  *
  STORE 0                                         TO lnIOHandle, lnCX, lnLongitudSalida
  STORE V_SQL_DRIVER                    TO lcEntrada
  STORE SPACE( V_TRAMA_TAMANO )TO lcSalida
  *
  TRY
    *
    IF SQLAllocHandle( V_SQL_HANDLE_ENV, lnIOHandle, @lnIOHandle ) == 0
      *
      IF ( SQLSetEnvAttr(lnIOHandle, V_SQL_ODBC_VERSION, V_SQL_ODBC3, 0 ) ) == 0
        *
        IF SQLAllocHandle( V_SQL_HANDLE_DBC, lnIOHandle, @lnCX ) == 0
          *
          IF ( SQLBrowseConnect( lnCX, @lcEntrada, LEN( lcEntrada ), @lcSalida, V_TRAMA_TAMANO, @lnLongitudSalida ) ) == V_SQL_DATO
            *
           FOR lnIndi = 1 TO ALINES( laServidores, STREXTRACT(lcSalida, '{', '}'), .T., ',' )
              *
              ?laServidores[ lnIndi ]
              *
            ENDFOR
            *
          ENDIF
          *
        ENDIF
        *
      ENDIF
      *
    ENDIF
   *
  CATCH TO loException
  FINALLY
    *
    IF lnCX <> 0
      *
      SQLFreeHandle( V_SQL_HANDLE_DBC, lnCX )
      *
    ENDIF
    *
    IF lnIOHandle <> 0
      *
      SQLFreeHandle( V_SQL_HANDLE_ENV, lnCX )
      *
    ENDIF
    *
  ENDTRY
  *
ENDPROC
*
REFERENCIA GENERAL: MSDN ODBC Programmer's Reference
 

Antonio Muñoz de Burgos y Caravaca
www.emans.com  (Web realizada en vFoxPro)
eMans AC (Administrador Corporativo para SQL Server 2000&2005)
Sevilla - España
Manifestando el apoyo a la comunidad de desarrolladores de MS Visual FoxPro.

No hay comentarios. :

Publicar un comentario