Abrir formulario al evento notinlist |
Responder |
Autor | |
pabloph2016
Habitual Unido: 27/Enero/2016 Localización: vigo Estado: Sin conexión Puntos: 102 |
Opciones de entrada
Gracias(0)
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 |
|
Kiket
Asiduo Unido: 28/Diciembre/2005 Localización: España Estado: Sin conexión Puntos: 200 |
Opciones de entrada
Gracias(0)
|
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
|
|
pabloph2016
Habitual Unido: 27/Enero/2016 Localización: vigo Estado: Sin conexión Puntos: 102 |
Opciones de entrada
Gracias(0)
|
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 |
|
Kiket
Asiduo Unido: 28/Diciembre/2005 Localización: España Estado: Sin conexión Puntos: 200 |
Opciones de entrada
Gracias(0)
|
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
|
|
Kiket
Asiduo Unido: 28/Diciembre/2005 Localización: España Estado: Sin conexión Puntos: 200 |
Opciones de entrada
Gracias(0)
|
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:
.. espero que te sirva
Editado por Kiket - 18/Abril/2022 a las 20:41 |
|
Kike
|
|
pabloph2016
Habitual Unido: 27/Enero/2016 Localización: vigo Estado: Sin conexión Puntos: 102 |
Opciones de entrada
Gracias(0)
|
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 |
|
Kiket
Asiduo Unido: 28/Diciembre/2005 Localización: España Estado: Sin conexión Puntos: 200 |
Opciones de entrada
Gracias(0)
|
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
|
|
pabloph2016
Habitual Unido: 27/Enero/2016 Localización: vigo Estado: Sin conexión Puntos: 102 |
Opciones de entrada
Gracias(0)
|
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 |
|
Kiket
Asiduo Unido: 28/Diciembre/2005 Localización: España Estado: Sin conexión Puntos: 200 |
Opciones de entrada
Gracias(0)
|
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
|
|
main
Colaborador Unido: 31/Agosto/2009 Localización: OVIEDO Estado: Sin conexión Puntos: 1258 |
Opciones de entrada
Gracias(0)
|
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 ControlDim 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
|
|
pabloph2016
Habitual Unido: 27/Enero/2016 Localización: vigo Estado: Sin conexión Puntos: 102 |
Opciones de entrada
Gracias(0)
|
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 |
|
pabloph2016
Habitual Unido: 27/Enero/2016 Localización: vigo Estado: Sin conexión Puntos: 102 |
Opciones de entrada
Gracias(0)
|
Se puede cerrar
|
|
emiliove
Administrador Unido: 16/Junio/2009 Localización: Mexico Estado: Sin conexión Puntos: 5694 |
Opciones de entrada
Gracias(0)
|
Y la solución ¿cual fué?
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |