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