Actualizar lista en formulario

Tengo una formulario en el cual busco el nombre con una lista de una tabla llamada direcciones. Si el valor que introduzco no está en la lista, me sale un msgbox para que lo añada si quiero a la tabla direcciones, hasta aquí todo ok. Si le digo que si al msgbox se me abre otro formulario para que introduzca todos los datos, pero me gustaría que el dato nombre se traspasara automáticamente al nuevo formulario y no tener que escribirlo de nuevo, ¿cómo lo puedo hacer? Si no me explico bien, te puedo mandar la base de datos por mail para que le eches un vistazo...

1 Respuesta

Respuesta
1
Después de hacer el
DoCmd. OpenForm "x"
Haz:
forms!x!nombre = NewData
Salud.
Funciona, la sentencia que me has pasado, cuando se me abre el formulario datosclientes, este ya contiene el valor de la variable NewData. Pero cuando vuelvo al formulario en enfoque si que en el mismo campo y cuando le doy a Tab para pasar de campo, me dice que el dato NO Existe!, ¿Cómo puedo hacer para que no me de esté mensaje? ¿Tendría qué actualizar la lista para que no me diera este mensaje no? Te paso el código que tengo por si te es de ayuda. Gracias, y un saludo
Private Sub Procedencia_NotInList(NewData As String, Response As Integer)
'Pregunta al usuario si quiero añadir un nuevo valor a la lista
Dim strMessage As String
Dim dbsDATOSCLIENTES As Database
Dim rstTypes As DAO.Recordset
strMessage = MsgBox("El nombre " & "<< " & NewData & " >>" & " NO ESTÁ en la base de datos, ¿Quiere añadirlo? a la lista ?", vbOKCancel)
If strMessage = vbOK Then
Set dbsDATOSCLIENTES = CurrentDb
Set rstTypes = dbsDATOSCLIENTES.OpenRecordset("DATOSCLIENTES")
rstTypes.AddNew
DoCmd.OpenForm "datosclientes", acNormal
DoCmd.GoToRecord , , acNewRec
Forms!datosclientes!NOMBRE = NewData
rstTypes.Update
Response = acDataErrAdded
'Else
'Response = acDataErrDisplay
End If
End Sub
Al código le falta cerrar el formulario datosclientes, lo he comprobado.
Si se desea aprovechar para dejar que el usuario pueda completar más campos en datosclientes, entonces la rutina notinlist debe esperar hasta que el usuario lo cierre voluntariamente, para ello habrá que abrirlo como MODAL.
No recomiendo usar recordset al mismo tiempo que el form, y menos tal como se combina con el formulario
1-Mezclar comandos de recordset con comandos de formulario es erróneo
2-No hay ninguna asignacionde campos entre .addnew y .update.
A mi me funciona así:
Private Sub Procedencia_NotInList(NewData As String, Response As Integer)
'Pregunta al usuario si quiero añadir un nuevo valor a la lista
Dim strMessage As String
strMessage = MsgBox("El nombre " & "<< " & NewData & " >>" & _
" NO ESTÁ en la base de datos, ¿Quiere añadirlo? a la lista ?", vbOKCancel)
If strMessage = vbOK Then
DoCmd.OpenForm "datosclientes", acNormal
DoCmd.GoToRecord , , acNewRec
Forms!datosclientes!Nombre = NewData
DoCmd.Close acForm, "datosclientes"
Response = acDataErrAdded
End If
End Sub
Salud.
En el mensaje anterior me faltaba el código:
Private Sub Procedencia_AfterUpdate()
me.procedencia.requery
end sub
---
Matiz al penúltimo mensaje:
En tiempos yo sugería una alternativa con DAO usando recordsets y tal, para no tener que abrir el 2º formulario en MODAL.
Usando el recordset correctamente, como el dato clave queda agregado a la tabla maestra (lado 1), se termina el notinlist correctamente y entonces no hay que dejar el código en espera.
En ese caso:
1- se hace el addnew / update en el recordset
2- Se abre el formulario, pero no se va a un nuevo registro, sino que se abre filtrado por el valor que se ha agregado con el recordset
Salud.
El hacer un requery al combo para que la próxima vez agregue el newdata y no vuelva a pasar por el notinlist en ese valor, no se puede hacer en el mismo notinlist, creo, prueba en después de actualizar (afterupdate)
Salud.
Si el cuadro tiene bastantes filas, como afterupdate ocurre siempre, se puede mejorar el rendimiento evitándolo a menos que efectivamente haya habido un notinlist.
El que prefiera el formulario modal puede que trate de hacer el requery en el close del form modal
El que lo prefiera no modal, podría hacer :
1- Una variable global en alcance del formulario del notinlist (dim variable as boolean, en la sección declaraciones del formulario)
2- La variable toma el valor true en cualquier punto del evento notinlist
3- En el afterupdate solo se hace el requery si la variable es true
4- En el afterupdate en todo caso se hace la variable otra vez false (predeterminado en la dim)
Salud y que aproveche.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas