** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Abrir formulario al evento notinlist
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Abrir formulario al evento notinlist

 Responder Responder
Autor
Mensaje
pabloph2016 Ver desplegable
Habitual
Habitual


Unido: 27/Enero/2016
Localización: vigo
Estado: Sin conexión
Puntos: 102
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pabloph2016 Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Abrir formulario al evento notinlist
    Enviado: 18/Abril/2022 a las 19:32
Hola a todos: Tengo un formulario en el que pregunto el producto mediante un cuadro combinado, si tecleo algo que no está en la lista, en el evento notinlist pregunto si quiere añadir el dato. De una página de microsoft saqué un ejemplo para hacerlo mediante un inputbox por cada campo, consigo que funcione. Intenté hacerlo con un DoCmd.OpenForm "entrada_productos" y debajo un me.cc.Requery, después de añadir, al volver, me da el error 2118:Debe guardar el campo activo., probé a poner DoCmd.Runcommandsaverecord pero me da el mismo error.
¿Alguien puede decirme algo?
Gracias
Pablo

Arriba
Kiket Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 28/Diciembre/2005
Localización: España
Estado: Sin conexión
Puntos: 200
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Kiket Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Abril/2022 a las 20:00
La manera en que yo corrijo errores con el evento "NotInlist" es no limitando el combo a sus datos en lista, y luego al saltar el mensaje que pueda continuar sin que quede trabado el campo.., no se si esto pueda ayudarte..

Kike
Arriba
pabloph2016 Ver desplegable
Habitual
Habitual


Unido: 27/Enero/2016
Localización: vigo
Estado: Sin conexión
Puntos: 102
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pabloph2016 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Abril/2022 a las 20:06
Lo que quiero hacer es limitar a la lista y que de opción a añadir en caso de que no esté en la lista.
Gracias
Pablo

Arriba
Kiket Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 28/Diciembre/2005
Localización: España
Estado: Sin conexión
Puntos: 200
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Kiket Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Abril/2022 a las 20:18
Se puede mostrar el mensaje por el evento "NotInlist" aunque no se limiten los datos en la lista.. y luego ya se opera con lo que se desea (en este caso añadir)..; porque si limitamos los datos no podremos añadir..; tampoco soy muy experto en esto, pero creo que funciona así, lo revisaré esta noche para ver si estoy en lo cierto que no estoy en casa..; ya mañana veo si lo solucionaste y sino te enviaré el código que yo ejecuto en estos casos

Editado por Kiket - 18/Abril/2022 a las 20:21
Kike
Arriba
Kiket Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 28/Diciembre/2005
Localización: España
Estado: Sin conexión
Puntos: 200
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Kiket Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Abril/2022 a las 20:39
Perdón.. creo que me equivoqué.. si se puede añadir; mira este código que yo utilizo en estos casos para que pueda corregir el bloqueo y me de paso a continuar o añadir:

Private Sub CodFamProductyServ_NotInList(NewData As String, Response As Integer)
    Dim strName As String, strWhere As String
    strName = NewData
    
    '..Comprobamos primero si existe en la base de datos pero no en el combo
    If Not IsNull(DLookup("CodFamProductyServ", "Tbl2611_FamProductyServ", "CodFamProductyServ='" & NewData & "'")) Then
        MsgBox " .. Este Codigo de Familia esta duplicado (ya existe en la base de datos pero posiblemente no se marcó como agrupador); inserte uno nuevo o modifique este."
        Response = acDataErrContinue
        Me.CodFamProductyServ = ""
        Exit Sub
    End If
    '------
    
    strWhere = "[CodFamProductyServ] = '" & strName & "'"
    If vbYes = MsgBox("La Familia " & NewData & " no está definida. " & _
        "¿Quieres añadir esta Familia?", vbYesNo + vbQuestion + vbDefaultButton1) Then
         DoCmd.OpenForm "Frm2611_FamProductyServ", DataMode:=acFormAdd, WindowMode:=acDialog, _
            OpenArgs:=strName
           If IsNull(DLookup("CodFamProductyServ", "Tbl2611_FamProductyServ", strWhere)) Then
               MsgBox "Has fallado al añadir una Familia por el valor introducido.  Por favor intentalo de nuevo.", vbInformation
              Response = acDataErrContinue
            Else
                Response = acDataErrAdded
            End If
    Else
        Response = acDataErrDisplay
    End If
End Sub

.. espero que te sirva


Editado por Kiket - 18/Abril/2022 a las 20:41
Kike
Arriba
pabloph2016 Ver desplegable
Habitual
Habitual


Unido: 27/Enero/2016
Localización: vigo
Estado: Sin conexión
Puntos: 102
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pabloph2016 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Abril/2022 a las 18:08
Hola, gracias por las aportaciones.
No se si lo había dicho, consigo añadir un dato mediante un inputbox por cada campo, adaptando un ejemplo que vi en la web, de microsoft creo que era. Lo que pregunto es si puedo llamar a un formulario de entrada de datos que ya está hecho.
Gracias
Pablo


Arriba
Kiket Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 28/Diciembre/2005
Localización: España
Estado: Sin conexión
Puntos: 200
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Kiket Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Abril/2022 a las 23:12
Parece que tengas problemas con la relación del formulario con la tabla donde quieres guardarlos, por el origen de datos que tiene el formulario con dicha tabla.. porque comentas que si puedes guardar esos datos en campos del formulario (o eso es lo que entiendo) y luego al intentar hacer el guardado final (a la tabla) con ese formulario de entrada de datos no te deja.. es así?

Si fuese así, podrías no asociar el formulario directamente a la tabla y con un recordset (asociarlo entonces a esta) para antes de guardar ver si existen los datos que quieras guardar, evitando errores de duplicados por campos con clave principal o que son obligatorios en los guardados de un registro.. 
Kike
Arriba
pabloph2016 Ver desplegable
Habitual
Habitual


Unido: 27/Enero/2016
Localización: vigo
Estado: Sin conexión
Puntos: 102
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pabloph2016 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Abril/2022 a las 21:12
Con un inputbox por cada campo se graban en la tabla como yo quiero. Si en el evento notinlist, después de preguntar si quiero añadir, le digo si y tengo DoCmd.openform "entrada_productos",,,acformadd (no recuerdo cuantas comas). Se abre el formulario, tecleo los datos, y empiezan los problemas, ahora mismo no recuerdo si deja grabar el registro o no.
Tengo que volver a verlo, mañana lo intentaré otra vez y te comento.
Gracias
Pablo

Arriba
Kiket Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 28/Diciembre/2005
Localización: España
Estado: Sin conexión
Puntos: 200
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Kiket Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Abril/2022 a las 23:47
No he utilizado nunca la sentencía de los Inputbox.. pero estas intentando guardar datos con ellos a un registro de una tabla y luego con la apertura del formulario de entrada de datos quieres volver a hacerlo, ¿sobre la misma tabla?..(eso me confunde, porque un registro de una tabla tiene sus reglas para que se complete su guardado)..
Porque no guardar los datos del tirón con el formulario de entrada de datos?... aunque yo como dije lo haría de otra forma (suelo utilizar recordsets y consulto antes de guardar).. o utilizaría distintas tablas para actualizar los datos de los inputbox por una parte y luego otra tabla para los datos generales de un registro..; por ejemplo, un producto (coche) puede tener familias asociadas (marcas, TipoDeCombustible, etc.. que a veces conviene tener en otras tablas relacionadas)..; haz las pruebas que dices y mañana me indicas si el registro se grabó completamente o no; creo que por ahí deben ir los tiros..
Kike
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 21/Abril/2022 a las 12:56
HOLA
Esto es un ejemplo para añadir en un combo que recoge tipos de Unidades, uno que no exista en la Tabla "ArtiUds"

Private Sub UdsIni_NotInList(NewData As String, Response As Integer)
Dim ctl As Control
Dim rs As Recordset
Set rs = CurrentDb().OpenRecordset("ArtiUds", dbOpenDynaset)
    ' Devuelve un objeto de control que apunta al cuadro combinado.
    Set ctl = Me!UdsIni
    ' Pide al usuario que compruebe que desea agregar un nuevo valor.
    If MsgBox("El valor que pretende introducir no está en la lista: ¿Deseas agregar " & NewData & "?.", 292, "Actividades") = vbYes Then
        ' Establece el argumento Response para         'indicar que se han agregado los datos.
        
        rs.AddNew
        rs!Id_Ud = Nz(DMax("Id_Ud", "ArtiUds"), 0) + 1
        rs!Descrip = NewData
        rs.Update
        Response = acDataErrAdded
        MsgBox "Se añadio " & NewData & " al registro de unidades."
    Else
    ' Si el usuario elige no desea agregarlo, suprimir el mensaje de error y deshacer los     ' cambios.
        Response = acDataErrContinue
        ctl.Undo
    End If
rs.Close
Set rs = Nothing
End Sub

Saludos
Arriba
pabloph2016 Ver desplegable
Habitual
Habitual


Unido: 27/Enero/2016
Localización: vigo
Estado: Sin conexión
Puntos: 102
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pabloph2016 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 21/Abril/2022 a las 18:15
Hola, ayer decía que lo iba a probar hoy, el código que tengo es esta:
Private Sub producto_muestra_NotInList(NewData As String, Response As Integer)
Dim respuesta As Integer
respuesta = MsgBox("el dato tecleado:" & NewData & " no está en la lista" & vbCrLf & "Quieres añadir(S/N):", vbYesNo, "AÑADIR DATO")
If respuesta = vbYes Then 'yes=6,vbno=7
DoCmd.OpenForm "entrada_productos", , , , acFormAdd
DoCmd.RunCommand acCmdSaveRecord
Me.producto_muestra.Requery
End If
'*********************************
'Dim rsproductos As DAO.Recordset
'Dim i As Integer 'contador para los campos
'Dim sMsg As String 'para preguntar el dato de cada campo
'Response = acDataErrContinue
'Set rsproductos = CurrentDb.OpenRecordset("productos", dbOpenDynaset)
' rsproductos.AddNew
' rsproductos.Fields(0) = DMax("codigo_producto", "productos") + 1
' For i = 1 To rsproductos.Fields.Count - 1
' sMsg = "Dato del campo " & rsproductos(i).Name
' If rsproductos(i).Type = 3 Then sMsg = sMsg & " Tipo numérico"
' If rsproductos(i).Type = 10 Then sMsg = sMsg & " Tipo texto"
' 'inputbox(promt,title,default,xpos,ypos)
' rsproductos(i).Value = InputBox(sMsg)
' Next i
' rsproductos.Update
'Me.producto_muestra = Null
'Me.producto_muestra.Requery
'ElseIf respuesta = 7 Then
'MsgBox "Has pulsado No"
'End If
'*********************************
End Sub
Las líneas finales comentadas (') funcionan bien, en las iniciales, abrir un formulario de entrada es donde está el error: Error 2118 Debe guardar el registro...
No se si Response tendrá algo que ver
Un saludo
Pablo

Arriba
pabloph2016 Ver desplegable
Habitual
Habitual


Unido: 27/Enero/2016
Localización: vigo
Estado: Sin conexión
Puntos: 102
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pabloph2016 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Mayo/2022 a las 20:40
Se puede cerrar

Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita emiliove Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Mayo/2022 a las 20:57
Y la solución ¿cual fué?
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable