
Este código sirve para obtener una colección con los nombres de los DSN que hay en un equipo.
Pega el código en un módulo :
Public Enum enumDSNTypes
dsn_User = 31
dsn_System = 32
End Enum
Private Const SQL_FETCH_NEXT = 1
Private Declare Function SQLGetInstalledDrivers Lib "ODBCCP32.DLL" _
(ByVal s As String, ByVal sl As Integer, ByRef so As Integer) As Long
Private Declare Function SQLFreeEnv Lib "ODBC32.DLL" (ByVal han As Long) _
As Long
Private Declare Function SQLAllocEnv Lib "ODBC32.DLL" (ByRef han As Long) _
As Long
Private Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal han As _
Long, ByVal iDir As Integer, ByVal sServerName As String, ByVal _
iBuf1 As Integer, ByRef iRealBuf1 As Integer, ByVal sDesc As String, _
ByVal iBuf2 As Integer, ByRef iRealBuf2 As Integer) As Long
Public Function EnumDSNs(DSNList As Collection, _
Optional dsnType As enumDSNTypes = dsn_System)
Dim sDSN As String
Dim sDesc As String
Dim iLenDSN As Integer
Dim iLenDesc As Integer
Dim nRet As Long
Dim hSQL As Long
Dim bContinue As Boolean
bContinue = False
SQLAllocEnv hSQL
Do
sDSN = Space(1024)
sDesc = Space(1024)
If bContinue Then
nRet = SQLDataSources(hSQL, SQL_FETCH_NEXT, sDSN, _
1024, iLenDSN, sDesc, 1024, iLenDesc)
Else
nRet = SQLDataSources(hSQL, dsnType, sDSN, 1024, _
iLenDSN, sDesc, 1024, iLenDesc)
bContinue = True
End If
If nRet = 0 Then
DSNList.Add Mid(sDSN, 1, iLenDSN)
End If
Loop While iLenDSN <> 0 And nRet = 0
SQLFreeEnv hSQL
End Function
Y para saber los dsn's del equipo :
Dim colDSN As New Collection
Dim vDSNEntry
'para los de usuario debemos hacer
'EnumDSNs colDSN, dsn_User
'por defecto se muestran los de sistema
EnumDSNs colDSN
For Each vDSNEntry In colDSN
Debug.Print vDSNEntry
Next

