Buenos días a todos.
Con todos mis respetos hacia lo que encontramos por internet
(que he usado multitud veces yo mismo y que me ha valido), creo que lo que hay
que hacer es entender el funcionamiento de los formularios/subformularios.
Punto 1: Las relaciones (lo habitual es de uno a varios,
padre/hijos)
Habitualmente el padre (formulario) está relacionado con el
hijo (subformulario), de tal forma que cuando cambio el origen del padre, me
salen todos los hijos relacionados. Como sabemos el formulario tan solo
presentará un solo registro cada vez (en este caso con la clave producto) y
saldrán todos los registros en el subformulario –que haya relacionados- (no
otros).
Vale, si está así montado, que es lo lógico y habitual,
pasamos al:
Punto 2: Para entender el razonamiento
Creemos un cuadro combinado en el formulario para que nos
busque un registro en el formulario, deberá buscarse el nombre del producto.
‘Como este por ejemplo:
Private Sub Cuadro_combinado12_AfterUpdate()
' Buscar el
registro que coincida con el control.
Dim rs As Object
Set rs =
Me.Recordset.Clone
rs.FindFirst
"[PRODUCTO] = '" & Me![Cuadro combinado12] & "'"
If Not rs.EOF Then
Me.Bookmark = rs.Bookmark
End Sub
Siempre lo va a encontrar (… si existe claro…) y lo que hará
ese cuadro combinado es directamente colocar en el formulario el registro
correspondiente.
Punto 3: Código escrito por el programador.
Ninguno, todo se resuelve con, primero, el asistente para
confeccionar el formulario/subformulario y , segundo, el cuadro combinado
confeccionado de nuevo con el asistente.
Punto 4: Pero queremos pasar por todos los registros que
lleven “la
palabra que busco”, tal vez buscamos tornillos y hay: tornillos del
7, tornillos de tuerca, tornillo de rosca, destornilladores, etc…. Y tan solo
hemos escrito torni.
Evidentemente, no se podrá cumplir ese apartado con el
asistente del cuadro combinado que hemos
confeccionado, ya que tan solo nos presentará un registro (habrá ido a ese
registro concreto que coincide con la búsqueda), el que tenemos en pantalla,
tampoco habrá modificado el resto de registros, ya que podrás ir avanzando al
siguiente o al anterior (en caso de existir varios).
Punto 5: Volvemos ahora al cuadro combinado y ponemos esta
modificación
Private Sub Cuadro_combinado12_AfterUpdate()
' Buscar el
registro que coincida con el control.
Dim rs As Object
Set rs =
Me.Recordset.Clone
rs.FindFirst "[PRODUCTO] Like '*" & Me![Cuadro combinado12]
& "*'"
If Not rs.EOF Then
Me.Bookmark = rs.Bookmark
End Sub
Ahora ya va directamente al primer registro que coincida con
“cualquier trozo o palabra que hayas buscado. Pero tan solo habrá ido a ese
registro, los otros (anteriores/posteriores) seguirán existiendo.
Bueno, ya que sabemos hacer esto, sabremos hacer también….
Punto 6: El filtro para que tengamos tan solo los registros
que nos interesa ver
Private Sub Cuadro_combinado12_AfterUpdate()
' Buscar y dejar
tan solo los registros que contengan dentro del nombre producto, la palabra
escrita en el control.
Me.Filter =
"[PRODUCTO] Like '*" & Me![Cuadro combinado12] &
"*'"
Me.FilterOn = True
End Sub
Creo que está suficientemente explicado, y con esto sabremos
construir más cosas, es decir, no tan solo acceder a internet, “buscar/copiar/pegar/preguntar
si no anda”. Es decir, igual que empezamos todos, poco a poco.
El asistente nos asiste y enseña muchísimas cosas.
Saludos.
P.D.: Veo que me falta como poder trasladarme de un registro a otro (ya que ha filtrado todos los que quiero). Fácil, bajo, si están los botones de los registros, puedo ir pasando de uno a otro. O también puedo crear mis propios botones en el formulario (siguiente/anterior).
Editado por VIMIPAS - 25/Febrero/2020 a las 09:08