Cómo agregar un botón de búsqueda a su formulario de base de datos de acceso

Utilizo MS Access (todavía versión 2003 de Windows) para administrar mis listas importantes, como mi lista de inventario para mi tienda eBay. Me ocupo principalmente de productos únicos, por lo que, con el tiempo, tengo más de mil listados. Esto es mucho de lo que se debe realizar un seguimiento.

Necesitaba una buena forma de buscar y encontrar elementos en varios campos. Puede utilizar el “[control] + f “método abreviado de teclado, o puede usar el menú Editar | Buscar, para buscar, pero el valor predeterminado de Access es que coincida con todo el campo y debe cambiarlo si desea otra cosa. Por lo general, no quiero que coincida con todo el campo. Por lo general, desea Coincidir con cualquier parte del campo.

A algunas personas les gusta usar atajos de teclado. Soy más una persona del mouse si hay una forma de hacer algo con un solo clic. Si solo hay una forma de muchos clics que atraviesa los menús, incluso usando solo dos clics, como Editar | Buscar, entonces normalmente recurriré a presionar [control] + f. Pero este artículo no trata sobre si un método es mejor que otro; este artículo trata de ofrecer otra forma de realizar búsquedas mediante un formulario de base de datos de Access.

Entonces, he desarrollado un pequeño sistema de botones que utilizo para buscar elementos en un campo en particular. Pongo el botón a la derecha del campo en el que trabaja. Puedo acceder al cuadro de diálogo de búsqueda configurado de la manera que quiero con un clic.

Agrego el botón en el diseño de formulario usando la herramienta de botón. Si elige la opción Navegación de registros | Buscar acción de registro (una opción lógica), luego el asistente le da el siguiente código (cambiaremos el código más adelante):

Screen.PreviousControl.SetFocus

DoCmd.DoMenuItem acFormBar, acEditMenu, 10 ,, acMenuVer70

La primera línea, Screen.PreviousControl.SetFocus es agradable. Establece el enfoque de qué campo se buscará en el último campo que tocó. Podría tener un botón para todas las búsquedas de esta manera, pero primero tendrá que hacer clic en un campo y luego hacer clic en el botón. Son dos clics y no todos los usuarios pueden entender que así funciona.

La segunda línea, DoMenuItem, es específica de cada versión de Access y significa, en este caso, el décimo elemento del menú Editar. Tendría que cambiar esto para cada versión de Access.

Si elige la opción Navegación de registros | En su lugar, la acción Buscar siguiente, el asistente le proporciona el siguiente código:

Screen.PreviousControl.SetFocus

DoCmd.FindNext

FindNext es mejor que DoMenuItem porque no es necesario cambiar el código para cada versión de Access. El cuadro de diálogo que aparece cuando hace clic en el botón personalizado en este artículo tiene un botón Buscar siguiente, por lo que realmente no necesita dos botones, Buscar y Buscar siguiente. Find solo funcionará bien.

La codificación del asistente de acceso está bien, pero no tiene control de los parámetros para la búsqueda. No me gusta tener que configurar el cuadro de coincidencia de todo el campo para que coincida con cualquier parte del campo después de que lo olvido y ya he buscado usando todo el campo y no puedo encontrar lo que sé que debe estar allí.

Necesitaba una forma de buscar en cada campo con un clic, así que elegí un botón para hacerlo.

Tengo varios campos en los que quiero poder buscar. No quería escribir el mismo código una y otra vez para cada campo. Si encuentro una mejor manera de codificarlo, entonces tengo que recodificar cada instancia de ese código antiguo. Tener un procedimiento es mucho mejor.

Mi botón establece el foco de la búsqueda en un campo a la izquierda del botón y luego llama a un procedimiento para invocar el comando de búsqueda. Cada uno de estos botones en el formulario establece el foco en el campo a su izquierda y llama al mismo, una función para realizar la búsqueda.

Antes de llegar al código, necesito cubrir el concepto de que importa dónde se coloca el procedimiento. Si tiene muchos botones pero solo un formulario, puede agregar el procedimiento en el código del formulario en sí. Si tiene más de un formulario, o si desea que el procedimiento sea más general en caso de que necesite usarlo más adelante en otro formulario, entonces es mejor agregar este procedimiento a un módulo y no a sus formularios. Llamo a mi módulo General, pero puede agregar módulos separados con uno o más procedimientos relacionados para que pueda importarlos fácilmente a nuevas bases de datos según lo necesite. Este podría ser su módulo FindRecord. Encontrará módulos en la ventana principal de la base de datos junto con tablas, consultas, formularios, informes y macros.

Si coloca su procedimiento en su código de formulario, entonces el alcance de su procedimiento es válido solo para ese formulario. Si tiene su procedimiento en el formulario 1 y necesita llamarlo en el formulario 2, obtendrá un error porque el formulario 2 no puede encontrarlo. En ese caso, tendría que agregar otro procedimiento al formulario 2 y mantener dos procedimientos, o mejor, poner el procedimiento en un módulo para que ambos formularios puedan encontrarlo y usted solo tenga que mantener un procedimiento.

Una vez que use un módulo general, sus referencias de código también deben ser generales. No puede utilizar el acceso directo Yo para un nombre de campo como puede hacerlo en un procedimiento dentro de un formulario. Cuando un procedimiento está dentro de un formulario, el código Me interpreta para referirse al formulario.

Si necesita hacer referencia a un nombre de campo en un módulo general, debe usar una declaración general como:

Forms.frmInventory.PurchaseTotal

o

Formularios[frmInventory]![PurchaseTotal]

(Debe agregar corchetes si los nombres contienen espacios)

En este caso, PurchaseTotal es un nombre de campo en el formulario frmInventory en la colección de la base de datos de Forms Access. Si esto estuviera en el código frmInventory, sería simplemente:

Yo.PurchaseTotal

En nuestro caso, usaremos la propiedad Me in the OnClick en el formulario para establecer el foco en un campo específico usando el método Me y luego llamaremos a un procedimiento que no tiene necesidad de referirse a un nombre de campo, evitando así el problema Me.

Esto es lo que debe hacer para crear un botón de búsqueda útil:

* Crea un botón usando la herramienta de botones y su asistente.

* Configure el botón para mostrar texto y configure ese texto en F.

* Nombra el botón cmdFind + Nombre de campo, por lo que para buscar en un campo llamado InvNum el nombre sería cmdFindInvNum.

Una vez finalizado el asistente, edite el botón:

* Establezca el tamaño de fuente en 6, un tamaño pequeño pero legible.

* Establezca la tabulación en NO porque los usuarios no necesitan detenerse en el botón si están navegando por el formulario.

* Configure el texto de la barra de estado y el texto de la sugerencia de control para buscar registro para que los usuarios puedan recordar fácilmente lo que hace el botón cuando mantienen los punteros del mouse sobre su botón.

Tamaño de su botón lo más pequeño que pueda y aún poder ver la F. Yo uso 0.1708 pulgadas de ancho por 0.166 pulgadas de alto con texto Arial con el espaciado de la cuadrícula de mi formulario. Tu talla puede variar. Este es un buen tamaño porque su altura es la misma que la altura de mi texto y los cuadros combinados, por lo que todos encajan bien en cada línea.

(Después de crear un botón de esta manera, puede copiarlo y pegarlo para el resto de sus botones con todas estas configuraciones guardadas y configuradas en la copia. Todo lo que tiene que hacer es cambiar el nombre de cada botón y agregar el procedimiento de evento OnClick a continuación).

Ahora establece la propiedad OnClick en [Event Procedure]. Está configurando el procedimiento del evento para que actúe en un campo específico. Si el nombre del campo es ProductNumber, escriba el procedimiento de su evento como:

Me.ProductNumber.SetFocus

FindRecord

La primera línea, la acción SetFocus determina qué campo buscará su procedimiento y Me.Productumber especifica solo un nombre de campo. Si usa Screen.PreviousControl.SetFocus, como recomienda el asistente, para su primera línea, entonces buscará en el campo que tocó por última vez con el mouse. Esto es bueno, si eso es lo que quieres, pero no es lo que quiero que haga este botón.

La segunda línea, FindRecord, llama a su procedimiento personalizado. (En Windows. Después de agregar su procedimiento FindRecord personalizado, puede resaltar FindRecord aquí en el código del formulario y hacer clic con el botón derecho y seleccionar Definición para ir inmediatamente al código).

Luego agregue su procedimiento personalizado a un módulo y guárdelo:

Registro de búsqueda secundario público ()

DoCmd.GotoRecord ,, acFirst

SendKeys “% ha% n”, falso

DoCmd.RunCommand acCmdFind

End Sub

El primer comando es opcional, por lo que puede comentarlo agregando una comilla simple delante si no desea usarlo.

El primer comando establece el puntero de registro en el primer registro para iniciar la búsqueda. Hice esto porque pensé que era mejor comenzar a buscar desde el principio, pero no es necesario que este procedimiento funcione.

El segundo comando envía códigos clave para configurar el cuadro de diálogo de búsqueda. A continuación, se muestran algunas opciones posibles de una página web de Microsoft Knowledge Base http://support.microsoft.com/kb/120912: [out]

Seleccione la casilla Coincidir:% h

Coincidir con cualquier parte del campo:% ha

Coincidir con el inicio del campo:% hs

Buscar solo campo actual (borrado):% e

Coincidir con mayúsculas y minúsculas (seleccionado>):% c

Campos de búsqueda con formato (seleccionado):% o

Seleccione el cuadro de búsqueda:% r

Buscar arriba:% ru

Buscar hacia abajo:% rd

Seleccione el cuadro Buscar:% n

Por ejemplo, SendKeys% h selecciona el cuadro Match y SendKeys% ha selecciona el cuadro Match y establece el cuadro Match para que coincida con cualquier parte del campo. No tienes que hacer ambas cosas; utilice una variación de la segunda afirmación. Lo mismo es cierto para SendKeys% r y SendKeys% ru o SendKeys% rd.

La combinación particular en su procedimiento como está escrito aquí establece el cuadro Coincidir para que coincida con cualquier parte del campo y luego selecciona el cuadro Buscar qué para el foco de su cursor. Por lo tanto, está configurado para escribir lo que está buscando. Escriba su procedimiento con la configuración que desee.

La segunda parte de la declaración SendKeys es un valor booleano opcional que especifica el modo de espera. Si se establece en False (predeterminado), el control se devuelve al procedimiento inmediatamente después de que se envían las claves. Si se establece en Verdadero, las pulsaciones de teclas deben procesarse antes de que se devuelva el control a su procedimiento. Técnicamente no necesitamos especificarlo porque queremos Falso y el valor predeterminado es Falso; sin embargo, me gusta especificarlo para que me quede claro dentro de seis meses que es lo que quería.

El% delante de cada valor clave representa la tecla Alt en Windows, y supongo que representa la tecla Comando en Mac. En la ventana de código, si resalta SendKeys en el código y presiona la tecla de función F1; luego aparecerá una pantalla de ayuda que explicará información general sobre SendKeys. No busque en la ayuda de Access los códigos clave de búsqueda específicos que se muestran arriba; La ayuda de acceso es general y no incluye todo.

El tercer comando ejecuta la acción de búsqueda de acceso configurada por usted. Este es finalmente el comando que hace lo que quieres.

Admito que esta es una forma burda de hacer las cosas, pero esto es lo que Access nos da. La forma SendKeys es mejor que la forma DoMenuItem, pero puede tener problemas en un entorno multiusuario, como he leído pero no experimentado.

Puede experimentar con diferentes combinaciones de códigos clave. Puede enviar pulsaciones de teclas en diferentes líneas o combinarlas en una línea como lo he hecho yo. Recomiendo colocarlos todos en uno como lo hace el ejemplo. Si usa el código de tecla% n, colóquelo al final porque establece el foco en el cuadro Buscar qué y debería aparecer al final.

Pruebe esto en sus formularios de acceso y vea si es útil. Lo encuentro útil porque los usuarios generales no sabrán presionar [control] + f o para usar Editar | Buscar menú para encontrar algo. Ambos son demasiado nerd. Si saben sobre ellos, es mi experiencia que se tropezarán ocasionalmente con la configuración predeterminada de coincidencia de campo completo y no sabrán cómo obtener lo que quieren. Mucho depende del entrenamiento y la frecuencia de uso. A las personas bien formadas les irá mejor que a los usuarios mal formados. Las personas que realizan búsquedas con poca frecuencia pueden no recordar tan bien como los usuarios frecuentes.

Si los usuarios ven un botón al lado del campo, y si les enseñas que F significa buscar, probablemente lo usarán, ya que la búsqueda es tan fundamental para usar una base de datos que querrán una forma simple de buscar.

Le mostraré cómo agregar otros botones de formulario útiles a los formularios de acceso en otros artículos.

#Cómo #agregar #botón #búsqueda #formulario #base #datos #acceso

Leave a Comment