** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Modificar DSN de una conexion ODBC
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Modificar DSN de una conexion ODBC

 Responder Responder
Autor
Mensaje
rokoko1 Ver desplegable
Nuevo
Nuevo


Unido: 20/Marzo/2017
Localización: Pamplona
Estado: Sin conexión
Puntos: 28
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko1 Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Modificar DSN de una conexion ODBC
    Enviado: 05/Agosto/2017 a las 19:16
Hola

LLevo muchos intentos y no consigo hacer carrera, estoy bastante perdido en este tema.
He encontrado informacion, pero no consigo hacerlo funcionar.
Tengo una base de datos conectada a un servidor SQl Server mediante OCDB hasta hay todo bien.
Lo que quiero es cambiar el DSN mediante vba lo ultimo que he probado es esto.

Dim tdf As TableDef
    Set db = CurrentDb
        For Each tdf In CurrentDb.TableDefs
            If tdf.Connect <> vbNullString Then
                tdf.Connect = "ODBC;DSN=1;APP=Microsoft Office 2013;UID=sa;PWD=xxxxxx;DATABASE=Fichar;TABLE=" & tdf.Name
                tdf.RefreshLink
            End If
        Next

Me dice error al conectar con 1, 1 es el nombre del archivo DSN    1.dsn

A ver si me podeis orientar un poco....
Esto tambien lo he probado  http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=717  y otras tantas lineas de codigo, pero nada.........
Saludos y gracias
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18788
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Emilio Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Agosto/2017 a las 19:31
Hola!

no hace falta ir muy lejos




Editado por Emilio - 05/Agosto/2017 a las 19:44
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
rokoko1 Ver desplegable
Nuevo
Nuevo


Unido: 20/Marzo/2017
Localización: Pamplona
Estado: Sin conexión
Puntos: 28
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko1 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Agosto/2017 a las 19:53
Publicado originalmente por Emilio Emilio escribió:

Hola!

no hace falta ir muy lejos



Por estas paginas ya he andado, pero se me hace muy complicado la verdad.......
No acabo de entenderla bien y no tengo claro si es lo que busco
Mi idea era modificar un OCDB ya creado, por si se cambia de servidor, ip, usuario, pass, etc.....



Saludos
Arriba
rokoko1 Ver desplegable
Nuevo
Nuevo


Unido: 20/Marzo/2017
Localización: Pamplona
Estado: Sin conexión
Puntos: 28
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko1 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 09/Agosto/2017 a las 13:57
Buenas. Aqui sigo intentandolo pero sin mucho exito....
No se donde esta el fallo, pongo los datos pero al final me dice que no encuentra 1, que en este caso es el nombre de un dsn. Tambien he probado a poner hay nombre servidor, ip, etc...pero nada..
Este es el error  https://www.dropbox.com/s/phg8nupi8o2ekmc/Captura.JPG?dl=0

A ver si alguno me da alguna pista de porque falla en el apartado del dsn, esto son los parametros que hay que meter  en el formulario
ODBC;DSN=XXX;UID=XXX;PWD=XXX;DBQ=XXX

Saludos


Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador


Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1783
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita OmniPresente Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 10/Agosto/2017 a las 08:45
Prueba a hacer una vinculación manual y después consulta la propiedad Connect de cualquiera de las tablas, a ver qué valor tiene.

Saludos.
Arriba
rokoko1 Ver desplegable
Nuevo
Nuevo


Unido: 20/Marzo/2017
Localización: Pamplona
Estado: Sin conexión
Puntos: 28
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko1 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 10/Agosto/2017 a las 12:10
Buenas...
Estoy utilizando la informacion de la pagina que me facilito Emilio, estas dos


Algun progreso he hecho, por lo menos ya no me da errores, pero no me crea el DSN.. me salen los msgbox de que no se han podido crear
Estoy probando estos dos codigos, uno en cada base de datos para hacer pruebas, en rojo los datos que yo indroduzco.

No consigo ver que estoy haciendo mal ........

El primero.

#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=MONSTRUO-PC\SQLEXPRESS" & Chr$(0)
strAttributes = strAttributes & "DESCRIPTION=Temp DSN" & Chr$(0)
strAttributes = strAttributes & "DSN=DSN_TEMP" & Chr$(0)
strAttributes = strAttributes & "DATABASE=Fichar" & Chr$(0)
strAttributes = strAttributes & "UID=monstr" & Chr$(0)
strAttributes = strAttributes & "PWD=noma" & 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


El segundo

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=MONSTRUO-PC\SQLEXPRESS" & Chr$(0)
sAttributes = sAttributes & "Description=" & sDescription & Chr(0)
sAttributes = sAttributes & "Database=Fichar" & 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)   'Esta o creo que debe estar en true ya que es un servidor local, instalado en el pc que hago las pruebas.

' 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


Arriba
rokoko1 Ver desplegable
Nuevo
Nuevo


Unido: 20/Marzo/2017
Localización: Pamplona
Estado: Sin conexión
Puntos: 28
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko1 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 10/Agosto/2017 a las 20:09
Sigo probando

Me salta error 3170 en tiempo de ejecucion, no se puede encontrar el archivo ISAM instalable
En los dos pc

en la linea en rojo

Public Sub CreateLinkedTable()

    ' NOTE:  This code requires the DAO object library to work.
    ' If you are using the SampleACCDB.accdb sample file, then this
    ' reference should already be present.  When unsure, check the
    ' VBA project references under Tools -> References menu option
    ' in the VBA editor and make sure a reference is set to:
    '   1. Access 2007: Microsoft Office 2007 Access database engine Object Library
    '   2. Access 2003 and older: Microsoft DAO 3.6 Object library
   
    ' Define Variables
    Dim strConnection As String
    Dim daoTableDef As DAO.TableDef
   
    ' This must reference an existing DSN
    Const strDSNName = "TestDSN"
   
    ' The application name can be used for tracing and
    ' troubleshooting the source of problems on the server.
    ' This can be anything, but usually the more specific the better.
    Const strAppName = "Microsoft Office Access 2013"
 
    ' The database where the table resides on SQL Server
    Const strDatabase = "Fichar"
 
    ' User name for logging into the database server. This could be
    ' captured by a logon form and stored in a global variable.
    Const strUserName = "sa"
 
    ' Password for logging in to the database server. This could
    ' be captured by a logon form and stored in a global variable.
    Const strPassword = "alvirau"
 
    ' Then name of the table on the remote server
    Const strRemoteTableName = "tbFicha"
 
    ' The name of the table we want create in the local file
    ' that links to the Remote Table
    Const strLocalTableName = "dbo_tbFicha"

    ' This will build the ODBC connection string for our new table
    strConnection = _
        "ODBC:" & _
        "DSN=" & strDSNName & ";" & _
        "APP=" & strAppName & ";" & _
        "DATABASE=" & strDatabase & ";" & _
        "UID=" & strUserName & ";" & _
        "PWD=" & strPassword & ";" & _
        "TABLE=" & strRemoteTableName
        
    ' This creates a new table object and adds it to the local
    ' database.   If your tables already exist, then you would
    ' skip this code and use code to refresh the links, instead
    Set daoTableDef = CurrentDb.CreateTableDef( _
                                    strLocalTableName, _
                                    dbAttachSavePWD, _
                                    strRemoteTableName, _
                                    strConnection)
    CurrentDb.TableDefs.Append daoTableDef
 
    ' Clean up
    Set daoTableDef = Nothing

End Sub
Arriba
rokoko1 Ver desplegable
Nuevo
Nuevo


Unido: 20/Marzo/2017
Localización: Pamplona
Estado: Sin conexión
Puntos: 28
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita rokoko1 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 11/Agosto/2017 a las 13:30
Ya se porque no me funcionaba este ejemplo    http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=717
Tenia que ser DSN de usuario para funcionar.....
No me valdria para lo que yo quiero.....

Lo que yo quiero es que me cree un DSN de sistema.....estoy mas perdido que una aguja en un pajar...

Mi odjetivo seria imaginemonos una persona que controla unos datos de unas serie de empresas, esa empresas tienen digamos servidores locales donde estan alojados los datos. todas las empresas tienen las mismas tablas.. La persona que controla esas empresas tiene que conectarse con una misma base de datos access a ellas. En un formulario habria una serie de botones que actualizarian el DSN(cadena de conexion) dependiento a que empresas se conecte.
No solo seria para consulta de datos tambien para editarloso crearlos..  lo podria hacer de pc diferentes no siempre del mismo, de hay lo que no me vale lo de ODBC de usuario.....

A ver si me podeis orientar algo......

Saludos




Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable