La Web del Programador: Comunidad de Programadores
 
    Pregunta:  2625 - COMO CREAR DSN ODBC PARA SQL SERVER DESDE CODIGO
Autor:  enzo aranibar
Por favor alguien me puede ayudar en crear conexion odbc para sql server desde codigo para no estar configurando en cada equipo el dsn en el panel de control.

  Respuesta:  L.I. Enrique Campos Gómez
Puedes crearlo así:

'dentro de las declaraciones:
Private Const REG_SZ = 1 'Constant for a string variable type.
Private Const HKEY_LOCAL_MACHINE = &H80000002

Private Declare Function RegCreateKey Lib "advapi32.dll" Alias _
"RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias _
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal _
cbData As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long

'dentro de una función:
Dim DataSourceName As String
Dim DatabaseName As String
Dim Description As String
Dim DriverPath As String
Dim DriverName As String
Dim LastUser As String
Dim Regional As String
Dim Server As String

Dim lResult As Long
Dim hKeyHandle As Long

'Especificar los parametros del DSN.

DataSourceName = "Nombre_DSN"
DatabaseName = "Nombre_DB"
Description = "Descripcion_DSN"
DriverPath = "C:\WINDOWS\SYSTEM32\SQLSRV32.dll"
'AQUI HABRIA QUE BUSCAR EL DIRECTORIO SYSTEM32 DE LAS MAQUINAS, ESTE EJEMPLO ES PARA WINDOWS XP
LastUser = "sa"
Server = "Nombre_Servidor"
DriverName = "SQL Server"

'Crea la Llave del DSN

lResult = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\ODBC\ODBC.INI\" & _
DataSourceName, hKeyHandle)

'Establece las Variables del DSN

lResult = RegSetValueEx(hKeyHandle, "Database", 0&, REG_SZ, _
ByVal DatabaseName, Len(DatabaseName))
lResult = RegSetValueEx(hKeyHandle, "Description", 0&, REG_SZ, _
ByVal Description, Len(Description))
lResult = RegSetValueEx(hKeyHandle, "Driver", 0&, REG_SZ, _
ByVal DriverPath, Len(DriverPath))
lResult = RegSetValueEx(hKeyHandle, "LastUser", 0&, REG_SZ, _
ByVal LastUser, Len(LastUser))
lResult = RegSetValueEx(hKeyHandle, "Server", 0&, REG_SZ, _
ByVal Server, Len(Server))

'Cierra la nueva Llave del DSN.

lResult = RegCloseKey(hKeyHandle)

'Abre "Origen de Datos (ODBC)" para mostrar el nuevo DSN
'Especifica el nuevo valor
'Cierra la Llave

lResult = RegCreateKey(HKEY_LOCAL_MACHINE, _
"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", hKeyHandle)
lResult = RegSetValueEx(hKeyHandle, DataSourceName, 0&, REG_SZ, _
ByVal DriverName, Len(DriverName))
lResult = RegCloseKey(hKeyHandle)

  Respuesta:  Victor Saldivia
Solo se puede si ocupas una conexion RDO.

´ Crear cadena de palabras clave.
strAttribs = "Description=" _
& "SQL Server" _
& Chr$(13) & "UID=<ID>" _
& Chr$(13) & "PWD=<PWD>" _
& Chr$(13) & "SERVER=<SERVER>"

´ Crea un nuevo DSN o vuelve a registrarlo. rdoEngine.rdoRegisterDataSource <DSN>, _
"SQL Server", True, strAttribs