** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Busqueda de registro en formulario
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoBusqueda de registro en formulario

 Responder Responder
Autor
Mensaje
Abel Ver desplegable
Nuevo
Nuevo


Unido: 08/Julio/2019
Localización: España
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Tema: Busqueda de registro en formulario
    Enviado: 29/Julio/2019 a las 17:10
Hola, tengo una nueva duda, a ver si me podéis echar un cable. 

He creado un formulario que al final tiene un botón que activa un evento tal como sigue:

Si el campo X del formulario esta null entonces abro un nuevo formulario , llamémosle FORM1, hasta aquí perfecto via if isnull ..... ahora bien, si el campo X no esta null, contiene una referencia,  me gustaría que abriese el FORM2 que contiene información de una tabla y que esa referencia del campo X la tuviese en cuenta al abrir el form 2 de tal forma que abriese ese registro exacto de la tabla y no otro cuando abre el FORM2. 

Imagino que debe ser fácil, pero sólo llego a abrir el FORM2 con otro registro que no es el del campo X por tanto con una información que no me sirve ?

Alguna idea ?

Gracias.
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 29/Julio/2019 a las 17:38
Hola.
¿Cómo abres el form2?
¿Hacen falta todos los registros de la tabla del form2 o sólo el registro del campo X?
Ya comentas.
Un saludo a todos
Arriba
Abel Ver desplegable
Nuevo
Nuevo


Unido: 08/Julio/2019
Localización: España
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 30/Julio/2019 a las 11:06
Hola,

El form 2 lo abro desde el mismo boton con un evento:

Private Sub Comando44_Click()

If IsNull(FacturaNr) Then
DoCmd.OpenForm "Formulario22"   ( este seria el FORM1 )

Else
DoCmd.OpenForm "Formulario23"   ( este seria el FORM2 )

End If
End Sub

En el form2 tienen que aparecer todos los registros si.

Gracias
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 30/Julio/2019 a las 11:22
Hola.
Mira este hilo del foro:

Casi seguro que aporta ideas para resolver la duda.
Ya comentas.
Un saludo a todos
Arriba
Abel Ver desplegable
Nuevo
Nuevo


Unido: 08/Julio/2019
Localización: España
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 30/Julio/2019 a las 16:05
Gracias !

Por lo que entiendo tengo que agregar codigo a los dos formularios. Mi primer formulario es el Formularioesp y al final abro el Formulario22, este no tengo problema y lo abro y cierro en funcion de si el campo FacturaNr esta vacio o no. Ahora añado el resto para el evento del comando al hacer click y que no sea null:

Private Sub Comando44_Click()
If IsNull(FacturaNr) Then
DoCmd.OpenForm "Formulario22"

Else

DoCmd.Save
Dim stDocName As String
stDocName = "FORMULARIO23"
DoCmd.OpenForm stDocName, , , , , , Me.NumeroDEF

End If
 
End Sub

En la parte del codigo del formulario 23 es donde me pierdo mas:

Private Sub Form_Open(Cancel As Integer)


If Not IsNull(Me.OpenArgs) Then
    
    Dim rst As Recordset
    Set rst = Me.RecordsetClone
   
    rst.FindFirst "Id  =" & Me.OpenArgs
    Me.Bookmark = rst.Bookmark
    
    rst.Close
   
     Else
     Me.Form.Filter = "NumeroDEF = Me.NumeroDEF"
     Me.Form.FilterOn = False
   
     End If
End Sub

La variable es que el campo FacturaNr esté o no vacio, pero cuando abro el formulario 23 quiero que me abra el formulario por el registro ( que tambien existe en el formularioesp ) NumeroDEF

Que me sugieres ?


Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 30/Julio/2019 a las 17:13
Hola.
Prueba con un código parecido a:

Private Sub Form_Open(Cancel As Integer)
 Dim rst As Recordset

If Not IsNull(Me.OpenArgs) Then
   
    Set rst = Me.RecordsetClone
    
    rst.FindFirst "NumeroDef  =" & Me.OpenArgs
    Me.Bookmark = rst.Bookmark
     
    rst.Close

     End If
End Sub



Eso sí, suponiendo que en el formulario23 el campo también se llama NumeroDef y que siempre existe  el valor buscado. Sí se tiene duda de esto del valor, habrá que utilizar "Nomatch" para comprobar que la búsqueda tiene éxito o no. También se supone que es un valor numérico, si no es así habrá que ponerlo entre comillas simples.
Escrito de memoria, así es que....
Ya comentas.
Un saludo a todos
Arriba
Abel Ver desplegable
Nuevo
Nuevo


Unido: 08/Julio/2019
Localización: España
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 31/Julio/2019 a las 09:37
Hola gracias, 

El campo NumeroDEF existe en el formulario23 pero puede ser alfanumérico, por tanto lo entrecomillo simple y me da el error  " el argumento no es opcional " 

Si lo entiendo bien el numero o secuencia del registro y los tipos de argumentos deben coincidir, puede que el error esté en que no he declarado el argumento como opcional ?
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 31/Julio/2019 a las 10:10
Hola.
Pero ¿qué has puesto y en que línea salta el error?
Ya comentas.
Un saludo a todos
Arriba
Abel Ver desplegable
Nuevo
Nuevo


Unido: 08/Julio/2019
Localización: España
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 31/Julio/2019 a las 10:38
Perdon,

He puesto lo que me has pegado arriba, pero he cambiado las comillas dobles por simples:

Private Sub Form_Open(Cancel As Integer)
 Dim rst As Recordset

If Not IsNull(Me.OpenArgs) Then
  
    Set rst = Me.RecordsetClone
   
    rst.FindFirst ''NumeroDef  ='' & Me.OpenArgs
    Me.Bookmark = rst.Bookmark
    
    rst.Close

     End If
End Sub

El error me lo marca en la linea

rst.FindFirst ''NumeroDef  ='' & Me.OpenArgs  ( sombreado Find First )

Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 31/Julio/2019 a las 10:52
No, No por ser una cadena quedaría:

rst.FindFirst ''NumeroDef  ='" & Me.OpenArgs & "'"

Ya comentas
Arriba
Abel Ver desplegable
Nuevo
Nuevo


Unido: 08/Julio/2019
Localización: España
Estado: Sin conexión
Puntos: 39
Enlace directo a este mensaje Enviado: 31/Julio/2019 a las 11:17
Ahora si !!! si señor !!!

Ostras me acabas de alegrar el dia, me tenia loco !!

Gran ayuda, gran aporte.

Muchas gracias.
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 31/Julio/2019 a las 11:44
Hola.
En un hilo de hoy mismo, Jesús ( Mihura) ponía esta apostilla:

Dices que no entiendes nada de módulos (VBA) y quieres manejarlos, necesitas aprender. En este foro hay un excelente curso de iniciación al Access de Eduardo Olaz, hazlo, verás que bien te viene Wink

La hago también mía y creo que es válida para este hilo y otros muchos de este foro.
Un saludo a todos


Editado por prga - 31/Julio/2019 a las 11:53
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable