Error al agregar registros y no estar en la lista. 2147467259

Tras adaptar un ejemplo en el evento NotInList me surge el siguiente error

(Idmc es un campo Id autonumérico de la tabla donde se está agreganto el registro "Insuficiencia Respiratoria" junto con otros registros que estoy pegando.)

(Sfrm nexopatolmc es un subformulario donde pego los registros y surge el cartel)

Si bien se terminan pegando sin problemas, surge ese mensaje.

También me sucedió en otro suformulario donde adapté el ejemplo.

-------------------------------------------------

Esto es adaptado el ejemplo 2 que me facilitó Jacinto TrillovJareño de J. Miralles.

-------------------------------------------------

Private Sub idmc_NotInList(NewData As String, Response As Integer)
   On Error GoTo idmc_NotInList_Error
        ''para este ejercio tenemos que tener activada la referencia ADO, para eso vais
        ''al menu Herramientas>>Referencias y buscáis la referencia Microsoft Activex Data Objects x.x Library
        ''la versión más nueva que tengais( 2.7,2.8, 6.0, en mi caso es la 6.0)
        Dim conexion As ADODB.Connection
        Dim Nuevo As String 'asignaremos el nuevo elemento que introduzcamos en el combo
        Dim SQL As String   'instruccón SQL para insertar en la tabla
        Dim ctl As Control ''declaramos una variable de tipo control
        Set ctl = Me.IdMC ''creamos el objeto y le asignamos el combo.
        Set conexion = CurrentProject.Connection ''creamos el objeto de tipo Connection
        ''quitamos cualquier apostrofe, con la función Replace, antes de insertar en la tabla
        ''y de esta forma evitaremos errores.
            Nuevo = Replace(NewData, "'", "''")
        ''al no estar en la lista nos saltará este mensaje, y si le pulsamos vbYes agregaremos el nuevo valor a la tabla.
        ''también evitaremos que nos salte el mensaje predefinido de access
        If MsgBox("Esta Manifestación no esta en la lista, ¿la añadimos?", vbYesNo, "Añadir..") = vbYes Then
            Response = acDataErrAdded 'acDataErrAdded no muestra ningún mensaje al usuario de access pero permite agregar
                                  'la entrada a la lista del cuadro combinado.
            'con esta instrucción sql introducimos en el campo Nombres de la tabla tblNombres el nuevo valor que haya en el combobox.
            SQL = "INSERT INTO manifestacionesclinicas(manifestacionclinica) Values('" & Nuevo & "')"
            conexion.Execute SQL ''ejecutamos la sentencia sql
        Else
            Response = acDataErrContinue ''evitara que salga el mensaje predefinido de access
                                         ''y continuará el código
            ctl.Undo    ''deshacemos lo que hemos escrito
        End If
   On Error GoTo 0
   Exit Sub
idmc_NotInList_Error:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure idmc_NotInList of Documento VBA Form_Sfrm nexopatolmc"
End Sub
                                                       -------------------------------------------------

*Cabe aclarar que estoy trabajando con tablas vinculadas en Mysql y Localhost.

2 Respuestas

Respuesta
3

Tu error está en copiar "tal cual" el código de Jose María Miralles cuando son casos distintos: el de Jose trabaja con una tabla local, y tu trabajas con tablas vinculadas.

Por eso te da el error de conexión, porque con esta línea: Set conexion = CurrentProject.Connection  estableces una conexión local, no a la tabla vinculada de la BD externa.

De todas formas, no te hace falta complicarte tanto y volver a abrir la conexión, si ya tienes las tablas vinculadas. Simplemente con poner (como si fuera una tabla local):

Private Sub idmc_NotInList(NewData As String, Response As Integer)
Dim resp As Integer
resp = MsgBox("El valor <" & NewData & "> no está dado de alta. ¿Desea añadirlo?", vbInformation + vbYesNo, "CONFIRMACIÓN")
If resp = vbYes Then 'Si el usuario dice que lo quiere añadir...
    'Gestionamos el argumento Response
    Response = acDataErrAdded
    'Insertamos el nuevo valor en la tabla
    CurrentDb.Execute ("INSERT INTO manifestacionesclinicas(manifestacionclinica) VALUES ('" & NewData & "')")
Else 'El usuario se arrepiente
    'Gestionamos el argumento Response
    Response = acDataErrContinue
    'Deshacemos lo escrito por el usuario
    Me.idmc.Undo
End If
End Sub

La alternativa para usar el código que tienes, es crear la cadena de conexión a la BD vinculada (que tendría esta pinta: https://www.connectionstrings.com/mysql/ ) y abrir el conector con esa cadena (https://msdn.microsoft.com/es-es/vba/access-vba/articles/create-an-ado-connection-string ). Pero en mi opinión, es complicarse sin necesidad...

Un saludo.


     bit.ly/ForoNkSv 

Respuesta
1

Noa: Al estar usando MySQL no te puedo orientar, porque no tengo experiencia en ello.

Es posible que haya un fallo de conexión puntual, pero sinceramente no lo sé.

Mi sugerencia es que busques por ese error y ver si en algún mensaje te da una pista.

Yo lo haría pero aunque vea alguna pista no lo voy a poder probar. Saludos >> Jacinto

¡Gracias! Sveinbjorn El Rojo me ayudó a esolverlo adaptando lo que me enviaste.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas