Cómo crear, modificar y eliminar un DSN mediante programación

Cómo crear, modificar y eliminar un DSN mediante programación
Por Enrique Martínez Montejo[Microsoft Most Valuable Professional - Visual Basic]
Última revisión: 14/08/2003

El siguiente artículo explica la manera de configurar un origen de datos
con nombre mediante programación, lo que proporcionará una flexibilidad mayor
a la hora de tener acceso a los datos, ya que el usuario no necesitará
explícitamente utilizar el Adminitrador de orígenes de datos ODBC para crear,
configurar, modificar y eliminar un DSN. Para ello utilizaremos la función API
SQLConfigDataSource incluída en la biblioteca de vínculos dinámicos
ODBC32.DLL, cuya declaración es la siguiente:

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

Argumentos de la función

hwndParent

Manipulador de la ventana padre. Si el manipulador es nulo, no se
visualizará ningún cuadro de diálogo de configuración. Si por el contrario le
indicamos el valor de la propiedad hWnd de un formulario, se mostrará
el correspondiente cuadro de diálogo de configuración para validar que todos
los datos sean correctos. Si el orígen de datos con nombre ya existe, el cuado
de diálogo nos preguntará si deseamos sobreescribir el DSN ya existente.

fRequest

Tipo de petición. Éste argumento puede contener uno de los siguientes
valores:

Constante Valor Descripción
ODBC_ADD_DSN 1 Añade un nuevo DSN de usuario.
ODBC_CONFIG_DSN 2 Condigura (modifica) un DSN de usuario ya existente.
ODBC_REMOVE_DSN 3 Elimina un DSN de usuario existente.
ODBC_ADD_SYS_DSN 4 Añade un nuevo DSN de sistema.
ODBC_CONFIG_SYS_DSN 5 Modifica un DSN de sistema ya existente
ODBC_REMOVE_SYS_DSN 6 Elimina un DSN de sistema existente.

lpszDriver

La descripción del controlador que se utilizará. Éste es el nombre
presentado a los usuarios en lugar del nombre del controlador físico (archivo
DLL). Entre otros muchos, algunos valores pueden ser:

Microsoft Access Driver (*.mdb) Para bases de datos Microsoft Access.
Microsoft Excel Driver (*.xls) Para archivos de libros de trabajo de Microsoft Excel.
Microsoft Text Driver (*.txt; *.csv) Para archivos de texto con formato de tabla.
SQL Server Para bases de datos Microsoft SQL Server.
Microsoft dBASE Driver (*.dbf) Para archivos de base de datos dBASE.

Para conocer la descripción de los controladores que puede utilizar en su
sistema, revise las subclaves especificadas en la siguiente clave del Registro
de Windows:

HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INI

lpszAttributes

Lista de los atributos en forma de "nombre de clave=valor". Estas cadenas
deberán estar separadas por terminaciones Null. Los atributos especificados son
generalmente entradas predeterminadas específicas del controlador, y que se
incluyen en el Registro de Windows. No es necesario proporcionar todas las
entradas, ya que el controlador puede solicitárselas al usuario mediante un
cuadro de diálogo, siempre y cuando que en el parámetro
hwndParent se
haya establecido en Null.

Valor de retorno

La función devolverá 1 si ésta ha terminado correctamente, y 0 en caso de
error. Si al llamar a la función no existe ninguna entrada en el Registro de
Windows, la función devolverá 0.

Crear un DSN de usuario para Microsoft Access

Un origen de datos de usuario ODBC almacena la información de conexión al
proveedor de datos indicado, y sólo es visible y utilizable en el equipo
actual por el usuario indicado. Por cada nuevo orígen de datos de usuario, se
creará una subclave en la siguiente clave del Registro de Windows:

HKEY_CURRENT_USERSoftwareODBCODBC.INI

A continuación vamos a crear un nuevo DSN de usuario, que utilizará el
driver de Microsoft Access para conectarse con el origen de datos:

Dim dl As Long               ' Valor devuelto por la función API

Dim sPath As String          ' Ruta de la base de datos

Dim sAttributes As String    ' Aributos

Dim sDriver As String        ' Nombre del controlador

Dim sDescription As String   ' Descripción del DSN

Dim sDsnName As String       ' Nombre del DSN

Const ODBC_ADD_DSN As Long = 1
' Se creará un DSN de usuario

' Establecemos los atributos necesarios

sDsnName = "Ejemplo_DSN_Usuario"

sDescription = "Nuevo DSN de usuario para Access"

sPath = "C:Mis documentosBd1.mdb"

sDriver = "Microsoft Access Driver (*.mdb)"

' Los pares de cadenas acabarán en valor Null

sAttributes = "DSN=" & sDsnName & Chr(0)

sAttributes = sAttributes & "Description=" & sDescription & Chr(0)

sAttributes = sAttributes & "DBQ=" & sPath & Chr(0)

' Indicamos la ruta del archivo de información de grupos de trabajo

sAttributes = sAttributes & "SystemDB=C:WindowsSystemSystem.mdw" & Chr(0)

' El usuario que inicia sesión por defecto

sAttributes = sAttributes & "UID=Admin" & Chr(0)

' La contraseña del usuario por defecto

sAttributes = sAttributes & "PWD=123456" & Chr(0)

' Creamos el nuevo origen de datos de usuario especificado

dl = SQLConfigDataSource(0&, ODBC_ADD_DSN, sDriver, sAttributes)

If (dl = 1) Then

MsgBox "El DSN de usuario se ha creado correctamente."

Else

MsgBox "No se ha podido crear el DSN de usuario
especificado."

End If

Crear un DSN de sistema para Microsoft SQL Server

Un origen de datos de sistema ODBC almacena información acerca de cómo
conectarse al proveedor de datos indicado. Un origen de datos de sistema es
visible para todos los usuarios de un equipo, incluidos los servicios de NT. A
diferencia del lugar donde se almacena la información del DSN de usuario, por
cada nuevo orígen de datos de sistema se creará una subclave en la siguiente
clave del Registro de Windows:

HKEY_LOCAL_MACHINESOFTWAREODBCODBC.INI

A continuación vamos a crear un nuevo DSN de sistema, que utilizará el
driver de Microsoft SQL Server para conectarse con el origen de datos:

Dim dl As Long                          ' Valor devuelto por la función API

Dim sAttributes As String               ' Aributos

Dim sDriver As String                   ' Nombre del controlador

Dim sDescription As String              ' Descripción del DSN

Dim sDsnName As String
' Nombre del DSN

Const ODBC_ADD_SYS_DSN As Long = 4      ' Se creará un DSN de sistema

Const vbAPINull As Long = 0&            ' Puntero NULL

' Establecemos los atributos necesarios

sDsnName = "Ejemplo_DSN_Sistema"

sDescription = "Nuevo DSN de sistema para SQL Server"

sDriver = "SQL Server"

' Los pares de cadenas acabarán en valor Null

sAttributes = "DSN=" & sDsnName & Chr(0)

sAttributes = sAttributes & "Server=(Local)" & Chr$(0)

sAttributes = sAttributes & "Description=" & sDescription & Chr(0)

sAttributes = sAttributes & "Database=pubs" & Chr(0)

' Si deseamos utilizar la autenticación de Windows NT, deberemos de

' especificarlo en la cadena de atributos

sAttributes = sAttributes & "Trusted_Connection=True" & Chr(0)

' Creamos el nuevo origen de datos de usuario especificado.

' Si deseamos que aparezca el cuadro de diálogo, tendremos que

' especificar la propiedad «hWnd» del formulario donde se realiza

' la llamada a la función API.

dl = SQLConfigDataSource(vbAPINull, ODBC_ADD_SYS_DSN, sDriver, sAttributes)

If (dl) Then

MsgBox "Se ha creado el DSN de sistema."

Else

MsgBox "No se ha podido crear el DSN de sistema."

End If

Modificar un DSN de usuario para Microsoft dBASE Driver

Para que la función API modifique los valores que deseemos, necesariamente
tendremos que indicar el nombre del origen de datos de usuario (o de sistema)
así como el nombre del driver ODBC utilizado. Igualmente, el parámetro
fRequest
deberá de tener el valor de la constante ODBC_CONFIG_DSN (para modificar un
DSN de usuario) o
ODBC_CONFIG_SYS_DSN (para modificar un DSN de sistema).

A continuación vamos a modificar la ruta del directorio por defecto que
tenemos especificado en un DSN de usuario, el cual utiliza el driver ODBC de
Microsoft dBASE:

Dim dl As Long                     ' Valor devuelto por la función API

Dim sAttributes As String          ' Aributos

Dim sDriver As String              ' Nombre del controlador

Dim sDsnName As String
' Nombre del DSN

Const ODBC_CONFIG_DSN As Long = 2  ' Se modificará un
DSN de usuario

' Establecemos los atributos necesarios

sDsnName = "dBASE Files"

sDriver = "Microsoft dBASE Driver (*.dbf)"

' Los pares de cadenas acabarán en valor Null

sAttributes = "DSN=" & sDsnName & Chr(0)

sAttributes = sAttributes & "DefaultDir= C:Mis documentos" & Chr(0)

' Modificamos el origen de datos de usuario especificado

dl = SQLConfigDataSource(0&, ODBC_CONFIG_DSN, sDriver, sAttributes)

If (dl = 1) Then

MsgBox "El DSN de usuario se ha modificado correctamente."

Else

MsgBox "No se ha podido modificar el DSN de usuario
especificado."

End If

Si no se especifica el parámetro DefaultDir, el driver ODBC para
dBASE utilizará el directorio actual del sistema, salvo que en la cadena de
conexión especifiquemos explícitamente dicho parámetro.

Eliminar un DSN de sistema

Para eliminar un nombre de origen con nombre, simplemente deberemos de
especificar el nombre del DSN así como el driver ODBC utilizado. El parámetro
fRequest
deberá de tener el valor de la constante ODBC_REMOVE_DSN (para eliminar un DSN
de usuario) o ODBC_REMOVE_SYS_DSN (para eliminar un DSN de
sistema).

El siguiente ejemplo eliminará definitivamente un DSN de sistema:

Dim dl As Long                 ' Valor devuelto por la función API

Dim sDriver As String          ' Nombre del controlador

Dim sDsnName As String         '
Nombre del DSN

Const ODBC_REMOVE_SYS_DSN As Long = 6    ' Se eliminará un DSN
de sistema

' Establecemos los atributos necesarios

' CUIDADO: no dejar espacios en blanco entre el parámetro

' «DSN», el signo igual y el nombre del DSN (DSN=Nombre DSN)

sDsnName = "DSN=Ejemplo_DSN_Sistema"

sDriver = "SQL Server"

' Modificamos el origen de datos de usuario especificado

dl = SQLConfigDataSource(0&, ODBC_REMOVE_SYS_DSN, sDriver, sDsnName)

If (dl = 1) Then

MsgBox "El DSN de sistema se ha eliminado correctamente."

Else

MsgBox "No se ha podido eliminar el DSN de sistema
especificado."

End If

http://mvp-access.es/softjaen/vb6/api/odbc/sjtodbc002.htm

Deja una respuesta

Tu dirección de correo electrónico no será publicada.