Imprimir página | Cerrar ventana

Busqueda de registro en formulario

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84625
Fecha de impresión: 28/Marzo/2024 a las 14:48


Tema: Busqueda de registro en formulario
Publicado por: Abel
Asunto: Busqueda de registro en formulario
Fecha de publicación: 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.



Respuestas:
Publicado por: prga
Fecha de publicación: 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


Publicado por: Abel
Fecha de publicación: 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


Publicado por: prga
Fecha de publicación: 30/Julio/2019 a las 11:22
Hola.
Mira este hilo del foro:
http://www.mvp-access.com/foro/abrir-un-formulario-en-un-registro-determinado_topic80620_post485722.html" rel="nofollow - http://www.mvp-access.com/foro/abrir-un-formulario-en-un-registro-determinado_topic80620_post485722.html

Casi seguro que aporta ideas para resolver la duda.
Ya comentas.
Un saludo a todos


Publicado por: Abel
Fecha de publicación: 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 ?




Publicado por: prga
Fecha de publicación: 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


Publicado por: Abel
Fecha de publicación: 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 ?


Publicado por: prga
Fecha de publicación: 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


Publicado por: Abel
Fecha de publicación: 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 )



Publicado por: prga
Fecha de publicación: 31/Julio/2019 a las 10:52
No, No por ser una cadena quedaría:

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

Ya comentas


Publicado por: Abel
Fecha de publicación: 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.


Publicado por: prga
Fecha de publicación: 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



Imprimir página | Cerrar ventana