Hola
Aqui te envio un ejemplo completo
Necesitas
1- 5 Label1
2- 2 ComboBox
3- 3 Text
Colocar los Label asi, en el mismo orden:
DSN:
Id. de Usuario:
Contraseña:
Controlador:
Servidor:
Colocar el Resto de los controles asi, en el mismo orden:
Combo1
Text1
Text2
Combo2
Text3
obviamente al lado de los label
Ejemplo:
DSN : Combo1
Id. de Usuario: Text1
....etc.
y el codigo es el siguiente:
'----------------------
Option Explicit
Private Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN%, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription%) As Integer
Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&)
Const SQL_SUCCESS As Long = 0
Const SQL_FETCH_NEXT As Long = 1
Sub TomaDSN()
Dim i As Integer
Dim sDSNItem As String * 1024
Dim sDRVItem As String * 1024
Dim sDSN As String
Dim sDRV As String
Dim iDSNLen As Integer
Dim iDRVLen As Integer
Dim lHenv As Long 'controlador de entorno
On Error Resume Next
Combo1.AddItem "(Ninguno)"
'obtener los DSN
If SQLAllocEnv(lHenv) <> -1 Then
Do Until i <> SQL_SUCCESS
sDSNItem = Space$(1024)
sDRVItem = Space$(1024)
i = SQLDataSources(lHenv, SQL_FETCH_NEXT, sDSNItem, 1024, iDSNLen, sDRVItem, 1024, iDRVLen)
sDSN = Left$(sDSNItem, iDSNLen)
sDRV = Left$(sDRVItem, iDRVLen)
If sDSN <> Space(iDSNLen) Then
Combo1.AddItem sDSN
Combo2.AddItem sDRV
End If
Loop
End If
'quitar los duplicados
If Combo1.ListCount > 0 Then
With Combo2
If .ListCount > 1 Then
i = 0
While i < .ListCount
If .List(i) = .List(i + 1) Then
.RemoveItem (i)
Else
i = i + 1
End If
Wend
End If
End With
End If
Combo1.ListIndex = 0
End Sub
Private Sub Combo1_Click()
On Error Resume Next
If Combo1.Text = "(Ninguno)" Then
Text3.Enabled = True
Combo2.Enabled = True
Else
Text3.Enabled = False
Combo2.Enabled = False
End If
End Sub
Private Sub Form_Load()
Call TomaDSN
End Sub
'---------------------------------
Ahi tienes las DSN y los Driver.
Ahora solo necesitas tu creatividad para aplicarlos en tu sistema.
Espero que te sirva
Saludos
Ariel....