Menu

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

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.