Académique Documents
Professionnel Documents
Culture Documents
MISMA TABLA1
Vamos a crearnos un formulario continuo (varios elementos) sobre la anterior tabla, que
llamaremos FClientes.
En ese formulario, en su encabezado, vamos a añadir un cuadro de texto que nos servirá como
elemento de búsqueda. A este textbox lo llamaremos txtBusca 2, y añadiremos a su lado un
botón de comando que llamaremos cmdBusca. Finalmente, a su derecha, añadiremos un botón
que llamaremos cmdLimpiar. Más o menos como os muestro a continuación:
1
Visítame en http://neckkito.siliconproject.com.ar
UNA TABLA INESPERADA... O NO
Como vamos a realizar la búsqueda, para este ejemplo,
sobre los campos de nombre, primer apellido y segundo
apellido vamos a crearnos una tabla auxiliar que nos recoja
los resultados de la búsqueda. A esta tabla la llamaremos
TAux y tendrá los campos que comentábamos más el código
de cliente, que será el que utilizaremos como criterio de
filtro. La tabla podría tener la siguiente estructura:
• El código cliente es numérico (entero largo) porque nuestro código de cliente lo hemos
definido como autonumérico. Si, por ejemplo, lo hubiéramos definido como texto en
TClientes en TAux también lo deberíamos haber definido como texto. Es importante que
haya una correcta equivalencia entre los tipos de campo.
• Los tres campos restantes, en TClientes, yo los he definido con un tamaño del campo
de 25, por lo que en TAux también los defino con un tipo de tamaño de 25. Si no hay
también esta equivalencia entre tamaños podemos encontrarnos con datos truncados.
En consecuencia, también es importante mantener esta homogeneidad en cuanto al
tamaño de los campos.
Una vez tenemos esta tabla auxiliar vamos a crearnos un formulario continuo sobre TAux, que
llamaremos FAux. Vamos a añadir un botón de comando a la izquierda del código de cliente
para poder seleccionar el que nos interese, y que llamaremos cmdSeleccionar. A mí me ha
quedado así:
Vamos a sacar las propiedades de este formulario y nos vamos a ir a la Pestaña Otras, y ahí
situaremos en SÍ las propiedades emergente y modal.
• Pestaña Formato:
◦ Centrado automático: SÍ
◦ Estilo de los bordes: DIÁLOGO
◦ Selectores de registro: NO
◦ Botones de desplazamiento: NO
2
Visítame en http://neckkito.siliconproject.com.ar
PROGRAMANDO NUESTROS CÓDIGOS
Vamos a empezar calentando con un código sencillito. Así,
en FClientes, en el evento “Al hacer clic” del botón
cmdLimpiar generaremos el siguiente código3:
…
Private Sub cmdLimpiar_Click()
With Me
'Limpiamos el valor del textbox
.txtBusca.Value = Null
'Quitamos el filtro del formulario
.FilterOn = False
End With
End Sub
…
Vamos a por el botón cmdBusca. En el mismo evento “Al hacer clic” vamos a generar el
siguiente código:
….
Private Sub cmdBusca_Click()
'Declaramos las variables
Dim elValor As String
Dim miSql As String
Dim i As Long
Dim losCampos(1 To 3) As String
'Cogemos el valor del textbox
elValor = Nz(Me.txtBusca.Value, "")
'Si no hay valor salimos
If elValor = "" Then Exit Sub
'Eliminamos los valores que pudiera haber en TAux
CurrentDb.Execute ("DELETE FROM TAux")
'Nos rellenamos la matriz con los nombres de los campos
'sobre los que queremos realizar la búsqueda en TClientes
losCampos(1) = "NomCli"
losCampos(2) = "Apell1Cli"
losCampos(3) = "Apell2Cli"
'Como vamos a buscar sobre 3 campos realizamos un bucle FOR con
'3 pasadas
For i = 1 To 3
'Creamos la SQL que buscará sobre los sucesivos campos
miSql = "INSERT INTO TAux (CodCliAux, NomCliAux, Apell1Aux, Apell2Aux)" _
& " SELECT TClientes.CodCli, TClientes.NomCli, TClientes.Apell1Cli," _
& " TClientes.Apell2Cli FROM TClientes" _
& " WHERE TClientes.[" & losCampos(i) & "] LIKE '*" _
& elValor & "*'"
'Ejecutamos la consulta
CurrentDb.Execute (miSql)
Next i
'Abrimos el formulario de resultados. Nos aseguramos de abrirlo en modo
'sólo lectura para que no se puedan modificar los datos.
DoCmd.OpenForm "FAux", , , , acFormReadOnly
…
Los campos que vamos a buscar se almacenan en una matriz <losCampos()>. Como en el
ejemplo vamos a buscar en tres campos yo la he declarado así:
3 Para generar código debemos sacar las propiedades del control → Pestaña Eventos, y nos situamos en la parte “blanca” a la
derecha del evento que queremos programar. Veremos un pequeño botón de puntos suspensivos. Si hacemos clic sobre él nos
aparecerá una ventana que nos pedirá qué operación deseamos realizar. Le indicamos que queremos “generar código”.
3
Visítame en http://neckkito.siliconproject.com.ar
Si necesitáramos más o menos campos deberíamos dimensionarla en función del número de
campos. Por ejemplo, si realizáramos la búsqueda en 4 campos la deberíamos declarar así:
losCampos(1) = "NomCli"
losCampos(2) = "Apell1Cli"
losCampos(3) = "Apell2Cli"
losCampos(4) = "Otros"
Sigamos: con la misma tónica, como son tres campos i va de 1 a 3. Si necesitáramos cuatro
campos el inicio bucle FOR debería haber sido así:
For i = 1 To 4
Lo que hace el código en el bucle FOR es buscar, en una primera pasada, en el primer campo a
través de la SQL y anexar los datos que encuentra; buscar en el segundo campo en la segunda
pasada y así sucesivamente.
Para finalizar sólo necesitaríamos programar el botón que hemos ubicado en el formulario
FAux. Para ello debemos generar, en el evento “Al hacer clic” de cmdSeleccionar, el siguiente
código:
…
Private Sub cmdSeleccionar_Click()
'Filtramos FClientes por el código cliente del registro seleccionado
With Forms!FClientes
.Filter = "CodCli=" & Me.CodCliAux.Value
.FilterOn = True
End With
'Cerramos FAux
DoCmd.Close acForm, Me.Name
End Sub
…
¿Qué pasaría si mi [CodCli] fuera un campo de tipo texto? Pues que el filtro debería escribirse
entre comillas simples, así:
¡suerte!
4
Visítame en http://neckkito.siliconproject.com.ar