Power Builder - recuperar DSN System (ODBC)

 
Vista:

recuperar DSN System (ODBC)

Publicado por Guillermo (68 intervenciones) el 07/12/2006 15:05:39
Este es el codigo en Visual Basic que hace lo que yo quiero hacer con Power Builder (mostrar la lista de conexiones DSN conectados a una PC), me gustaria saber si alguien de Uds. sabe como recuperar en Power Builder el Manipulador de entorno que en Visual Basic es henv .

Muchas gracias y Saludos,


Option Explicit

' Tipo de enumeración para los DSN
Private Enum EnumDSNTypes
DSN_User = 31 ' Para los DSN de usuario
DSN_System = 32 ' Para los DSN de sistema
End Enum

Private Declare Function SQLAllocEnv Lib "ODBC32.DLL" (ByRef phenv As Long) As Long

Private Declare Function SQLDataSources Lib "ODBC32.DLL" ( _
ByVal hEnv As Long, _
ByVal fDirection As Integer, _
ByVal szDSN As String, _
ByVal cbDSNMax As Integer, _
ByRef pcbDSN As Integer, _
ByVal szDescription As String, _
ByVal cbDescriptionMax As Integer, _
ByRef pcbDescription As Integer) As Long

Private Declare Function SQLFreeEnv Lib "ODBC32.DLL" (ByVal hEnv As Long) As Long
Private Sub Form_Load()

' Declaración de variables
Dim colDSN As Collection
Dim vItemDSN As Variant

' Creamos un nuevo objeto Collection para
' mostrar los DSN de sistema
Set colDSN = EnumDSN()

' Rellenamos la lista con los datos
' incluidos en la colección
If Not colDSN Is Nothing Then
For Each vItemDSN In colDSN
List1.AddItem vItemDSN
Next
End If

' Creamos de nuevo el objeto Collection para
' mostrar ahora los DSN de usuario
Set colDSN = EnumDSN(DSN_User)

' Rellenamos la lista con los datos
' incluidos en la colección
If Not colDSN Is Nothing Then
For Each vItemDSN In colDSN
List1.AddItem vItemDSN
Next
End If

' Liberamos la referencia al objeto Collection
Set colDSN = Nothing

End Sub
' La función devolverá una colección con los orígenes de datos
' con nombre (DSN) solicitados. Por defecto, leerá los DSN
' de sistema.
'
Private Function EnumDSN(Optional TypeDSN As EnumDSNTypes = DSN_System) As Collection

' Declaración de variables
Dim dl As Long ' Valor devuelto por la función API
Dim hEnv As Long ' Manipulador de entorno
Dim sDsnName As String ' El nombre del DSN
Dim iLenDsnName As Integer ' Longitud en caracteres del buffer del nombre
Dim sDescDriver As String ' Descripción del driver
Dim iLenDescDriver As Integer ' Longitud en caracteres del buffer de la descripción

Dim bContinue As Boolean ' True = Continúa la búsqueda de DSN
Dim oColDSN As Collection ' Objeto Collection

Const SQL_FETCH_NEXT As Long = 1 ' Indica que deberá leer el siguiente DSN

' Creamos un nuevo objeto Collection
Set oColDSN = New Collection

' Obtenemos un manipulador de entorno
SQLAllocEnv hEnv

' El bucle se ejecutará hasta que el valor devuelto por
' la función API sea distinto de cero.
Do
' Inicializamos las cadenas con una
' longitud adecuada
sDsnName = Space(1024)
sDescDriver = Space(1024)

' Si no es la primera vez que se ejecuta la rutina,
' obtenemos el siguiente DSN
If bContinue Then
dl = SQLDataSources(hEnv, SQL_FETCH_NEXT, sDsnName, _
1024, iLenDsnName, sDescDriver, 1024, iLenDescDriver)
Else
' Sólo se ejecutará la primera vez que llamemos
' a la función API, para obtener el primer DSN
dl = SQLDataSources(hEnv, TypeDSN, sDsnName, 1024, _
iLenDsnName, sDescDriver, 1024, iLenDescDriver)

' Indicamos que se desea continuar
' la búsqueda de DSN
bContinue = True
End If

' Si no ha habido error, añadimos el DSN a la colección
If dl = 0 Then
oColDSN.Add Mid(sDsnName, 1, iLenDsnName)
End If

Loop While dl = 0

' Liberamos los recursos asociados con el
' manipulador de entorno obtenido
SQLFreeEnv hEnv

' Devolvemos la colección creada
Set EnumDSN = oColDSN

' Liberamos la referencia al objeto
Set oColDSN = Nothing

' Si no ha habido error, añadimos la descripción del driver a la colección
If dl = 0 Then
oColDSN.Add Mid(sDescDriver, 1, iLenDescDriver)
End If

End Function
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