He creado un formulario de inicio de sesión llamado inicio de sesión donde el nombre de usuario se escribe en el cuadro de texto txtEmployee, y necesito mostrarlo en la segunda página en otro formulario en MS Access.Pasar parámetros entre formularios en MS Access
Respuesta
DoCmd.OpenForm
le permite pasar un valor arbitrario como último parámetro. Este valor se puede acceder en la nueva forma como Me.OpenArgs
:
' Invoked by some Button on the first form '
Sub GoToSecondPage()
DoCmd.OpenForm "MySecondPage", acNormal, , , , , txtEmployee.Value
End Sub
' Second form '
Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
lblShowEmployeeName.Value = Me.OpenArgs
End If
End Sub
(. Código ejemplo no probado)
Personalmente pasar a través de los argumentos abiertos al abrir el formulario. Por ejemplo, de la forma A su escribiría
DoCmd.OpenForm "frmB", , , , , acDialog,”Badger”
Y luego, en el caso AlAbrir de la forma B se puede capturar lo que ha enviado como esto
Me.txtSomething=Me.OpenArgs
Sólo puede pasar una cosa sin embargo lo que hago mucho es pasar una cadena delimitada por una tubería en los argumentos abiertos y luego dividirla.
¿Por qué abres con acDialog? – Fionnuala
Bueno, ese ejemplo fue tomado como un formulario emergente, así que quería que fuera modal, esto por supuesto puede ser eliminado si el OP solo quiere una forma normal –
un par de ideas ...
Utilice el evento AfterUpdate en el campo de nombre de usuario de inicio de sesión para escribir el nombre de una variable global, a continuación, rellenar el campo en la segunda página con el evento onLoad.
O, si va a la salida del registro en forma abierta en todo momento se podría establecer el valor por defecto del campo directamente a = [Formularios]! [LoginForm]! [Nombre de usuario]
por qué no crear una función pública que almacena &/o recupera una variable global que almacena después de que se ejecuta el primer formulario? Esto le permitiría no solo usarlo en uno o más formularios, sino también como criterios dentro de una consulta (por ejemplo, para devolver registros que coincidan con el nombre de usuario que ha almacenado).
Acepto que se trata de una seguridad "falsa", pero también hay momentos en los que es suficiente para sus necesidades. Lo he implementado antes, donde coincido con el nombre de usuario de la cadena de entorno a una entrada en una tabla de usuario.
BTW, me refiero a esta función como personalización, no como seguridad.
Solo un pensamiento.
Nunca usaría un global para esto. En cambio, usaría una variable STATIC dentro de la función que devuelve el valor, y si no está configurado, abriría el formulario para recopilar la información. Esto significa que es autocurativo y está a salvo de ser alterado en otro lugar del código. –
puede pasar una cadena delimitada como parámetro AbrirArgs:
DoCmd.OpenForm FormName:="miscForm", OpenArgs:=paramstring
Aquí es una rutina para procesar una cadena de tubos delimitado pasado como parámetro a DoCmd.OpenForm:
Dim Pstring As Variant
If Len(Me.OpenArgs) > 0 Then
Pstring = Split(Me.OpenArgs, "|")
var1 = Pstring(0)
<etc..>
End If
Generalmente veo la necesidad de hacer esto como una indicación de un problema de diseño. Es decir, si debe pasar tanta información al formulario, básicamente debería utilizar algún tipo de forma estructurada de hacerlo. –
@David, ¿te refieres a una variable de tipo 'struct'? Solo uso esto para un formulario en mi aplicación de acceso actual, para no tener que poner cosas en la base de datos antes de abrir el formulario, y luego otra vez cuando estoy en el formulario. Estoy abierto a una idea mejor, no soy experto en formularios de acceso. –
Hay muchas maneras de lograr esto. Una es simplemente insertar los datos en la forma llamada desde el contexto de llamada. Esto se puede hacer abriendo el formulario con acHidden y acDialog, y cuando haya terminado de obtener los datos en el formulario llamado, lo hará visible, lo que lo hace modal y la ejecución del código en el contexto de llamada se detiene. Generalmente no hago eso. Es más probable que use un módulo de clase, pero eso solo es rentable cuando tiene varios atributos que debe aprobar, como cuando se filtra en múltiples criterios. –
- 1. MS Access: ¿cómo se comunican los formularios entre sí los formularios?
- 2. MS Access sin VBA?
- 3. Proporcionar ayuda en forma en MS Access
- 4. MS Access prepara declaraciones
- 5. MS Access trigger?
- 6. VBA + Hilos en MS Access
- 7. ¿Tenemos transacciones en MS-Access?
- 8. MS Access Propiedades
- 9. Nhibernate y MS Access
- 10. Diagrama de relaciones entre entidades para MS Access
- 11. MS Access: Determine el tipo de objeto
- 12. j_security_check - ¿se pueden pasar parámetros adicionales para envíos de formularios?
- 13. MS Access 2010 Runtime - Falta el menú contextual de mouse derecho en formularios continuos
- 14. MS Access: tamaño de papel personalizado
- 15. Expresiones regulares en MS Access VBA?
- 16. MS Access 2007 JOIN en múltiples campos
- 17. Recuperar datos URL JSON en MS Access
- 18. Crear procedimiento almacenado en MS Access?
- 19. Seleccionar registros omitiendo filas en MS Access
- 20. Crear vista en MS Access 2007
- 21. ¿Cómo pasar un parámetro entre dos formularios en Axapta?
- 22. ¿Cómo pasar valores (parámetros) entre páginas XAML?
- 23. Maven: cómo pasar parámetros entre Mojos?
- 24. Pasar parámetros entre las plantillas de velocidad
- 25. Android: pasar parámetros entre las clases
- 26. C# Cómo conectar a MS Access 2007
- 27. Sincronizar datos de MS Access a MS SQL
- 28. Pasar parámetros en vistas parciales - MVC3/Razor
- 29. Importación de MS ACCESS DB a mySql?
- 30. ms-access: ¿cómo comentar el código sql?
es el usuario nombre lo mismo que el nombre de usuario de inicio de sesión de Windows? Si es así, puede obtener el nombre de: http://www.mvps.org/access/api/api0008.htm – Fionnuala
Además, ¿por qué necesita mostrar el nombre de usuario, seguramente el usuario sabe quiénes son? Si necesita el nombre por algún otro motivo, debe decirlo, porque hay más de una forma de pasar la información. Por ejemplo, si el nombre se usa para filtrar registros, el argumento Where del método OpenForm es probablemente el mejor. – Fionnuala
Parece que ha creado un sistema con seguridad falsa. ¿Por qué hiciste eso, en lugar de usar Jet ULS o la seguridad de Windows NTFS o Active Directory? –