crear dsn de sistema desde vb6

11
En un módulo declara esta API: Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _ (ByVal hwndParent As Long, ByVal fRequest As Long, _ ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long 'declaracion de constantes Public Const ODBC_ADD_DSN = 1 'Agregar origen de datos Public Const ODBC_CONFIG_DSN = 2 'Configurar (modificar) origen de datos Public Const ODBC_REMOVE_DSN = 3 'Quitar origen de datos Public Const ODBC_ADD_SYS_DSN = 4 'Agregar origen de datos DE SISTEMA Public Const ODBC_CONFIG_SYS_DSN = 5 'Configurar (modificar) origen de datos DE SISTEMA Public Const ODBC_REMOVE_SYS_DSN = 6 'Quitar origen de datos DE SISTEMA Para usar la API crea una función del tipo a: Function MantenimientoDSN(strDriver As String, Nombre As String, Descripcion As String, Path As String, USUARIO As String, Contraseña As String, Operacion As Long, SoloLectura As Boolean) As Boolean Const vbAPINull As Long = 0& ' NULL Pointer #If Win32 Then Dim intRet As Long #Else Dim intRet As Integer #End If Dim strAttributes As String strDriver = "Microsoft Access Driver (*.mdb)" 'Asignamos los parametros separados por null. strAttributes = "SERVER=" & Chr$(0) strAttributes = strAttributes & "DESCRIPTION=" & Descripcion

Upload: mymsystemas

Post on 24-Apr-2015

214 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Crear Dsn de Sistema Desde Vb6

En un módulo declara esta API:

Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _ (ByVal hwndParent As Long, ByVal fRequest As Long, _ ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long

'declaracion de constantes Public Const ODBC_ADD_DSN = 1 'Agregar origen de datos Public Const ODBC_CONFIG_DSN = 2 'Configurar (modificar) origen de datos Public Const ODBC_REMOVE_DSN = 3 'Quitar origen de datos Public Const ODBC_ADD_SYS_DSN = 4 'Agregar origen de datos DE SISTEMA Public Const ODBC_CONFIG_SYS_DSN = 5 'Configurar (modificar) origen de datos DE SISTEMA Public Const ODBC_REMOVE_SYS_DSN = 6 'Quitar origen de datos DE SISTEMA

Para usar la API crea una función del tipo a:

Function MantenimientoDSN(strDriver As String, Nombre As String, Descripcion As String, Path As String, USUARIO As String, Contraseña As String, Operacion As Long, SoloLectura As Boolean) As Boolean Const vbAPINull As Long = 0& ' NULL Pointer

#If Win32 Then Dim intRet As Long #Else Dim intRet As Integer #End If Dim strAttributes As String

strDriver = "Microsoft Access Driver (*.mdb)" 'Asignamos los parametros separados por null. strAttributes = "SERVER=" & Chr$(0) strAttributes = strAttributes & "DESCRIPTION=" & Descripcion & Chr$(0) strAttributes = strAttributes & "DSN=" & Nombre & Chr$(0) strAttributes = strAttributes & "DBQ=" & Path & Chr$(0) strAttributes = strAttributes & "UID=" & USUARIO & Chr$(0) strAttributes = strAttributes & "PWD=" & Contraseña & Chr$(0) strAttributes = strAttributes & "Readonly=" & CInt(SoloLectura) & Chr$(0) 'Para mostrar el diálogo usar Form1.Hwnd en vez de vbAPINull. intRet = SQLConfigDataSource(vbAPINull, Operacion, strDriver, strAttributes) If intRet Then MantenimientoDSN = True Else MantenimientoDSN = False End If

Page 2: Crear Dsn de Sistema Desde Vb6

End Function

'ejemplo del uso para access Private Sub Command1_Click() If MantenimientoDSN("Microsoft Access Driver (*.mdb)", "DSN_PRUEBA", "", "C:\Prueba.mdb", "", "", ODBC_ADD_SYS_DSN, False) Then MsgBox "DSN Creada" Else MsgBox "ERROR AL CREAR DSN" End If End Sub

Puedes crear, modificar o eliminar un ODBC de sistema o usuario dependiendo del valor del parámetro Operación de la función MantenimientoDSN.

Saludos,

.-.-.-.-.-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

Page 3: Crear Dsn de Sistema Desde Vb6

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

Page 4: Crear Dsn de Sistema Desde Vb6

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.

Saludos!

.-.-.-.-.-

'delcaracion de funcionPrivate Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _ (ByVal hwndParent As Long, ByVal fRequest As Long, _

Page 5: Crear Dsn de Sistema Desde Vb6

ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long

Public Function actualiza_ODBC(server As String)'declaracion de constantesPrivate Const ODBC_ADD_DSN = 1 ' Agrega nuevo ODBC data sourcePrivate Const ODBC_CONFIG_DSN = 2 ' Modificar data sourcePrivate Const ODBC_REMOVE_DSN = 3 ' Remover data sourcePrivate Const vbAPINull As Long = 0& ' NULL PointerDim intRet As LongDim strDriver As StringDim strAttributes As String

strDriver = "MySQL ODBC 3.51 Driver"'Asignamos los parametros separados por null.strAttributes = strAttributes & "DSN=conveniosInter" & Chr$(0)strAttributes = strAttributes & "DESCRIPTION=Prueba Modificar ODBC por codigo" & Chr$(0)strAttributes = strAttributes & "SERVER=" & server & Chr$(0)strAttributes = strAttributes & "UID=root" & Chr$(0)strAttributes = strAttributes & "PWD=root" & Chr$(0)strAttributes = strAttributes & "DATABASE=convenios" & 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 IfEnd Function

.-.-.-.-.-

http://www.elguille.info/colabora/vb2006/jesus_Ejemplo_Report_Manager2.htm

Cuando instala Microsoft Office, un icono ODBC que representa el Administrador de ODBC se instala en el panel de control. El Administrador de ODBC permite instalar y configurar orígenes de datos ODBC. En el Administrador de ODBC, puede instalar y configurar los siguientes tres tipos de DSN:

DSN de usuario DSN de sistema DSN de archivo

Volver al principio

DSN de usuario

Page 6: Crear Dsn de Sistema Desde Vb6

El DSN de usuario es un origen de datos que es específica del usuario. Un DSN de usuario se almacena localmente, pero sólo está disponible para el usuario lo crea. DSN de usuario no se utilizan por Microsoft Query. Si utiliza comandos de Microsoft Jet, ODBC o lenguaje de consulta estructurado (SQL) y omitir Microsoft Query, DSN de usuario son necesarios. DSN de usuario se almacenan en el registro de Windows bajo la clave siguiente:Orígenes de datos de HKEY_CURRENT_USER\Software\Odbc\Odbc.ini\Odbc

Volver al principio

DSN de sistema

A diferencia de un DSN de usuario, un DSN de sistema no es específica del usuario. Un sistema DSN se almacena localmente y no está dedicado a un usuario concreto. Cualquier usuario que inicie sesión un equipo que tiene permiso para tener acceso al origen de datos puede utilizar un DSN de sistema. Algunos programas, como Microsoft SQL Server o Microsoft Internet Information Server (IIS), requieren un DSN de sistema. Este DSN debe crearse en el servidor donde se encuentra el programa. Los DSN del sistema se almacenan en el Windows bajo la clave siguiente:Orígenes de datos de HKEY_LOCAL_MACHINE\Software\Odbc\Odbc.ini\Odbc

Volver al principio

DSN de archivo

El DSN de archivo se crea localmente y pueden compartirse con otros usuarios. El DSN de archivo está basado en archivo, lo que significa que el archivo .DSN contiene toda la información necesaria para conectarse al origen de datos. Tenga en cuenta que debe instalar el controlador ODBC localmente para utilizar un DSN de archivo. Microsoft Query utiliza el archivo DSN, pero Microsoft Jet y ODBC no utilizan DSN de archivo.

Se almacenan los DSN de archivo de manera predeterminada en el programa programa\Archivos Files\Odbc\Data Sources carpeta. DSN de archivo no se almacenan en el registro de Windows. El archivo .DSN es un archivo de texto que puede ver en cualquier editor de texto, como el Bloc de notas de Microsoft.

Nota : al conectarse a un existente origen de datos con Microsoft Query, sólo el disponible DSN de archivo que almacena en ese equipo se muestran. Microsoft Query no muestra el usuario o DSN de sistema. Sin embargo, puede crear un DSN de archivo que señala a un DSN de sistema.

Para crear un archivo DSN que señale a un DSN de sistema, siga estos pasos: 1. En un editor de texto, como el Bloc de notas de Microsoft, escriba las dos líneas

siguientes en un documento nuevo

[ODBC] DSN = MySysDSN

Page 7: Crear Dsn de Sistema Desde Vb6

donde "MySysDSN" es el nombre de un DSN de sistema existente que haya instalado en la herramienta ODBC en el panel de control.

2. Haga clic en Guardar en el menú archivo y escriba un nombre que incluya una extensión de archivo .DSN para el DSN de archivo; por ejemplo, las siguientes es un nombre válido:

"DBase4.dsn"

Incluya las comillas para asegurarse de que la extensión de nombre de archivo .DSN está agregada correctamente.

También puede compartir un DSN de archivo con otros usuarios. Para ello, compartir la carpeta en la que el archivo de DSN se almacena mediante los pasos siguientes:

1. Haga clic con el botón secundario del mouse en Inicio y, a continuación, haga clic en explorar .

2. Abra la carpeta que contiene los archivos .DSN. De forma predeterminada, esta es la carpeta programas programa\Archivos Files\Odbc\Data Sources.

3. Haga clic con el botón secundario en la carpeta y, a continuación, haga clic en Compartir . En la ficha Compartir , haga clic en Compartido como , escriba el nombre se va a utilizar para la carpeta en el cuadro Nombre de recurso y, a continuación, haga clic en Aceptar .

Nota : cada usuario debe instalar el controlador ODBC adecuado (el controlador que hace referencia el DSN de archivo) en el equipo para el DSN de archivo para que funcione correctamente.

Volver al principio

Macro de ejemplo para obtener datos externos a Microsoft Excel

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita, incluyendo, pero sin limitarse a, las garantías implícitas de comerciabilidad e idoneidad para un propósito determinado. En este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y las herramientas utilizadas para crear y depurar procedimientos. Los profesionales de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos a necesidades específicas. Si tiene poca experiencia en programación, desea póngase en contacto con un Microsoft Certified Partner o servicios de consultoría de Microsoft. Para obtener más información, visite estos sitios Web de Microsoft:

Microsoft certificado Partners - https://partner.microsoft.com/global/30000104

Servicios de asesoramiento de Microsoft -

Page 8: Crear Dsn de Sistema Desde Vb6

http://support.microsoft.com/gp/advisoryservice

Para obtener más información acerca de las opciones de soporte técnico que están disponibles y cómo ponerse en contacto con Microsoft, visite el siguiente sitio Web de Microsoft: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

El siguiente de Microsoft Excel Visual Basic para aplicaciones macro sirve un usuario o DSN de sistema existente para recuperar datos de una base de datos y almacenar los datos en una hoja de cálculo. El DSN que se utiliza en esta macro de ejemplo es MiDSN. El ejemplo de Microsoft Access hace referencia a base de datos Neptuno.mdb en la carpeta de programa\Microsoft Office\Office\Samples. Puede utilizar MiDSN como un usuario o DSN de sistema, pero no se puede utilizar como un DSN de archivo. Sub Get_Data() 'Define SQL query string to get the CategoryName field from 'the Category table. sqlstring = "SELECT CategoryName FROM Categories" 'Define connection string and reference File DSN. connstring = "ODBC;DSN=MyDSN" 'Create QueryTable in worksheet beginning with cell C1. With ActiveSheet.QueryTables.Add(Connection:=connstring, _ Destination:=Range("C1"), Sql:=sqlstring) .Refresh End WithEnd Sub

Volver al principio