Tengo un formulario de Microsoft Access 2010 con buzones y una casilla de verificación que representan ciertos parámetros. Necesito ejecutar una consulta con condiciones basadas en estos parámetros. También debería existir la posibilidad de que no haya criterios en los cuadros desplegables y la casilla de verificación para extraer todos los datos.

Tengo dos formas de trabajo de implementar esto:

  1. Construyo una consulta con declaraciones IIf en la cláusula WHERE, anidando declaraciones hasta que haya tenido en cuenta cada combinación de criterios. Hago referencia a los criterios en la lógica SQL usando Forms!frmMyFrm!checkbox1 por ejemplo o usando una función FormFieldValue(formName,fieldName) que devuelve el valor de un control con la entrada del formulario y el nombre del control (esto se debe a problemas anteriores ). Configuré esta consulta para que se ejecute con solo presionar el botón del formulario.

  2. Configuré un sub vba para que se ejecute con solo presionar el botón. Verifico las condiciones y configuro la consulta SQL en una cadena SQL predeterminada según los criterios de control (referenciados de la misma manera que el método anterior). Esto también involucra muchas declaraciones If...Else, pero es un poco más fácil de leer que una consulta gigante.

¿Cuál es el método preferido? ¿Cuál es más eficiente?

1
ZX9 28 ene. 2015 a las 21:32

2 respuestas

La mejor respuesta

No creo que encuentres que una forma es más eficiente que la otra, al menos no notablemente. En su mayor parte, es simplemente una preferencia personal.

Generalmente uso VBA y verifico el valor de cada menú desplegable / casilla de verificación y construyo partes de la consulta SQL y luego las pongo juntas al final. Sin embargo, el problema con el que puede encontrarse con este método es que si tiene una gran cantidad de menús desplegables y casillas de verificación, es fácil "perderse" en el código.

Si el tiempo de ejecución es muy importante, siempre puede usar algunos de los consejos ¿Cómo se prueba el tiempo de ejecución del código VBA? para ver cuál es más rápido.

1
Community 23 may. 2017 a las 12:14

Después de mucha experimentación, y un poco de información nueva que indica que tener una consulta prediseñada es más rápido que tener SQL compilado en VBA, la solución más eficiente y clara en el contexto de Microsoft Access es crear y guardar una serie de consultas dependientes de antemano.

Básicamente, cree una serie de consultas, cada una con un IIf dependiente de un criterio diferente. Entonces solo necesita ejecutar la consulta final. El único caso en el que tendría que incorporar un VBA If...Else es si necesita consultar algo más complicado que SELECT...WHERE(IIf(...)).

Esto tiene algunas ventajas:

  1. El SQL ya está compilado en la consulta guardada, lo que acelera las cosas.
  2. No más perderse en el código:
    • No existe una consulta gigante casi imposible de editar con demasiadas IIf s.
    • El código VBA mínimo es aún más fácil de seguir.
  3. Al menos para mí, que no soy un experto en SQL, es conveniente que a menudo pueda usar el generador de consultas visuales de MS Access para cada parte.
0
ZX9 2 abr. 2015 a las 18:02