Me interesaría saber como generar y modificar Fuentes de Datos ODBC (clave de la BD,...). Por ahora nadie me ha podido contestar, ¿me podríais aconsejar un lugar al que acudir? Con estas dos APIs he podido mostrar un combo con las ODBC creadas en el sistema pero no se como crearlas o modificarlas 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&) Gracias.
Aquí tienes un código para crear y eliminar DSN's. Declaramos las constantes y funciones necesarias : 'declaracion de constantes Private Const ODBC_ADD_DSN = 1 ' Add data source Private Const ODBC_CONFIG_DSN = 2 ' Configure (edit) data source Private Const ODBC_REMOVE_DSN = 3 ' Remove data source Private Const vbAPINull As Long = 0& ' NULL Pointer 'delcaracion de funciones #If Win32 Then Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _ (ByVal hwndParent As Long, ByVal fRequest As Long, _ ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long #Else Private Declare Function SQLConfigDataSource Lib "ODBCINST.DLL" _ (ByVal hwndParent As Integer, ByVal fRequest As Integer, ByVal _ lpszDriver As String, ByVal lpszAttributes As String) As Integer #End If Para crear un DSN : #If Win32 Then Dim intRet As Long #Else Dim intRet As Integer #End If Dim strDriver As String Dim strAttributes As String 'usamos el driver de SQL Server porque es el mas comun strDriver = "SQL Server" 'Asignamos los parametros separados por null. strAttributes = "SERVER=SomeServer" & Chr$(0) strAttributes = strAttributes & "DESCRIPTION=Temp DSN" & Chr$(0) strAttributes = strAttributes & "DSN=DSN_TEMP" & Chr$(0) strAttributes = strAttributes & "DATABASE=pubs" & Chr$(0) strAttributes = strAttributes & "UID=sa" & Chr$(0) strAttributes = strAttributes & "PWD=" & Chr$(0) 'Para mostrar el diálogo usar Form1.Hwnd en vez de vbAPINull. intRet = SQLConfigDataSource(vbAPINull, ODBC_ADD_DSN, strDriver, strAttributes) If intRet Then MsgBox "DSN Creado" Else MsgBox "Fallo en la creación" End If Para borrarlo : #If Win32 Then Dim intRet As Long #Else Dim intRet As Integer #End If Dim strDriver As String Dim strAttributes As String 'usamos el driver de SQL Server porque es el mas comun strDriver = "SQL Server" 'Asignamos los parametros separados por null. strAttributes = "DSN=DSN_TEMP" & Chr$(0) 'Para mostrar el diálogo usar Form1.Hwnd en vez de vbAPINull. intRet = SQLConfigDataSource(vbAPINull, ODBC_REMOVE_DSN, strDriver, strAttributes) If intRet Then MsgBox "DSN Eliminado" Else MsgBox "Fallo en el borrado" End If Para modificarlo: #If Win32 Then Dim intRet As Long #Else Dim intRet As Integer #End If Dim strDriver As String Dim strAttributes As String 'usamos el driver de SQL Server porque es el mas comun strDriver = "SQL Server" 'Asignamos los parametros separados por null. strAttributes = "SERVER=OtroSomeServer" & Chr$(0) strAttributes = strAttributes & "DESCRIPTION=Temp DSN modificado" & Chr$(0) strAttributes = strAttributes & "DSN=DSN_TEMP" & Chr$(0) strAttributes = strAttributes & "DATABASE=pubs" & Chr$(0) strAttributes = strAttributes & "UID=sa" & Chr$(0) strAttributes = strAttributes & "PWD=" & Chr$(0) 'Para mostrar el diálogo usar Form1.Hwnd en vez de vbAPINull. intRet = SQLConfigDataSource(vbAPINull, ODBC_CONFIG_DSN, strDriver, strAttributes) If intRet Then MsgBox "DSN Modificado" Else MsgBox "Fallo en la modificacion" End If Nota Si el DSN es para access hay que tener en cuenta : - En vez de DATABASE debes usar DBQ y especificar el nombre completo de la base de datos, incluyendo el path y la extensión. - El NO OBSTANTE por defecto es admin, aunque en la base de datos este en español y se llame administrador. *** La contraseña se guarda en la BD no en el DSN.