Implementar un cuadro combinado para buscar registros en un formulario de Access, parte 1

Llegó la duda de un lector, que no consigue que al seleccionar un valor en un cuadro combinado, Access le regrese todos los valores del registro que corresponde al valor seleccionado. 

Hay varios modos de solucionar el requerimiento, se me ocurren dos, uno sencillo, con el asistente de cuadros combinados y otro por pura fuerza bruta con código VBA. Dejo la fuerza bruta para otra entrada del blog y explico rápidamente cómo se hace con el asistente.

Voy a trabajar con la base de datos de ejemplo Neptuno.mdb (*), con una copia del formulario Clientes en Access 2003 (soy más pobre que Pepe el Toro y todavía no me alcanza para una versión más nueva).

1. Abro en modo de diseño el formulario que he copiado de Clientes.

2. Me aseguro que en el cuadro de herramientas esté activa la herramienta Asistentes para controles (la que tiene una varita mágica con tres puntos suspensivos).

3. Coloco un nuevo cuadro combinado en la parte superior del formulario, junto al título que dice Clientes.

4. Cuando se abre el asistente para cuadros combinados selecciono la tercera opción que dice así: Buscar un registro en el formulario según el valor que he seleccionado en el cuadro combinado.

5. Presiono el botón Siguiente.

El asistente me ofrece dos listas, Campos disponibles y Campos seleccionados

6. Selecciono el campo NombreContacto o NombreCliente (si lo hay) y presiono el botón con el signo > para pasar el campo a la lista de Campos seleccionados. He seleccionado el campo que se le va a mostrar al usuario para elegir clientes.

7. Presiono el botón Siguiente.

8. Ajusto el ancho de la columna para que los valores no queden recortados. Dejo marcada la casilla Ocultar la columna clave (la columna clave, en este caso, es IdCliente, un campo de texto que es la clave principal de la tabla Clientes).

9. Presiono el botón Siguiente.

El asistente me pregunta por la etiqueta que va a acompañar al cuadro combinado, yo escribo: “Selecciona un cliente“.

10. Presiono el botón Finalizar.

Así termina el asistente. Seguramente hay que organizar los elementos en la parte superior del formulario para que no se encimen.

Cuando pongo el formulario en la vista normal, ya puedo seleccionar un cliente de la lista y me trae los valores que corresponden a su registro. Podría ponerme a salta de gusto, pero yo soy muy serio. Queda para una segunda entrada cómo se implementa un cuadro combinado que usa la fuerza bruta de VBA.

Notas

Si se usa el asistente para cuadros combinados con tablas que no tienen un campo clave o llave, como el IdCliente, puede que no resulte, ¡hay que crear un campo que sea la clave principal en las tablas!.

***

Lo bueno: no he tenido que escribir una sola letra de código de programación.

Lo malo: cuando se corre el formulario en el Runtime de Access 2007, no funciona el cuadro combinado para encontrar el registro asociado. Por lo menos, a mí me ha estado pasando.

***

* El archivo de ejemplo Neptuno.mdb se instala con Access si se hace la instalación completa o personalizada. También lo he subido a la sección de archivos del grupo Access_Consultas (clic para descargar).



7 Responses to “ Implementar un cuadro combinado para buscar registros en un formulario de Access, parte 1 ”

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: Llegó la duda de un lector, que no consigue que al seleccionar un valor en un cuadro combinado, Access le regrese todos los valores del registro que corresponde al valor seleccionado.  Hay varios modos de solucionar el requer…

  2. Abigail says:

    Hola, mi problema es que funciona de maravillas en el ejemplo Neptuno, pero en mi proyecto, al crear un cuadro combinado con el asistente no aparece la tercera opción. Ayuda?

    Desde ya muchas gracias.

  3. Pablo says:

    Hola:
    Vale, mi problema es sencillo. Tengo el cuadro combinado y me busca los registros a la perfección. Pero lo que yo busco es que, además de buscarme los registros, cuando introduzca un elemento nuevo en el cuadro combinado me lo agregue a la tabla creándome un registro nuevo (en caso de ya existir me busca el registro como ya lo hace). No sé como sería posible realizar esto.+
    Gracias.

  4. Mario says:

    Abigail,

    Por favor disculpa la demora en responder. Se me ocurre que compruebes si tu tabla de origen de datos tiene un campo clave o llave declarado, eso es importante para el asistente de búsquedas.

    Lo más confiable sería conocer tu archivo de base de datos para sugerirte una mejor solución. Si gustas me lo puedes enviar compactado a paraservirle.com@gmail, haciendo referencia a esta entrada del blog.

    Saludos.

  5. Mario says:

    Pablo:

    Yo no he publicado la solución a tu duda aún, pero sé de alguien que si. En el blog de Juan Cots hay un ejemplo de cómo agregar nuevos elementos a una lista cuando estos no están presentes aún.

    La liga al artículo de Juan Cots.

    Espero que sea la solución que buscas.

    De cualquier modo voy a redactar sobre el tema en alguno de los próximos textos para este blog. Gracias por la visita.

  6. monguz says:

    disculpa excelente pagina tengo una duda quiero hacelerar mas mi base de datos todo lo hago con acces y quiero cambiar de base de datos intente con mysql pero es lento muy lento mas que acces porque o que puedo hacer para hacelerar ya que mi base pesa 50gbsoy de santa cruz bolivia urgente por favor !!!!!!!!!

  7. Mario says:

    monguz:

    Con 50gb o más es posible que otros sistemas de gestión de datos se pongan lentos también.

    Pero es importante, siempre, la normalización de los datos y un modelo de indices que apunten a los datos que sirven de ganchos a las consultas más frecuentes.

    Muchos de mis colegas, del mundo empresarial, se decantan por Oracle y SQL Server a la hora de considerar la velocidad. He recibido, también, comentarios favorables para Interbase y su hermano OpenSource Firebird.

    Respecto a MySQL, alguien ha propuesto una técnica de particionamiento orientada a mejorar el desempeño de una base de datos (sinceramente, nunca la he puesto en práctica). Otras personas proponen modificar la configuración de MySQL para que la ejecución de consultas tenga prioridad sobre otras tareas, tales como la inserción de datos. También se hacen otras recomendaciones relativas a la configuración.

    El tema es bien interesante y merece un poco más de atención, espero poder hacer una lista de recomendaciones en una entrada futura. Saludos.

Leave a Reply