Mejoras en los reportes condicionales (I)

Comenzando una serie de videos sobre el programa de los reportes condicionales, descubrí que podía optimizar muchísimo el código y reducir la cantidad de sentencias. De 697 líneas en el Fmain original, las reduje a poco más de 500 líneas. ¿Dónde había estado el error?

La esencia del programa había sido convertir las sentencias sql en variables, en principio sólo para los reportes imprimibles.

¿Podía hacerse lo mismo para los reportes por pantalla y usar la misma variable en ambos casos ?

Lo primero fue estudiar las diferencias entre una y otra.Veamos.

Para imprimir:

Public Sub pordirector1()

       Dim filtro As String

       filtro = cbxdirector.Current.text

            hresul = hconn.Exec(“Select * from films where director like ‘” & filtro & “‘”) ‘consulta sql”

              If hresul.Available = False Then ‘comprobar si hay resultado

                valor = “” ‘asignamos a valor un valor null

            Else

               valor = “Select * from films where director like ‘” & filtro & “‘”

           Endif

End

El mismo procedimiento , por pantalla:

Public Sub pordirector()

Dim filtro As String

      cargartabla

      filtro = cbxdirector.Current.text

      hresul = hconn.Exec(“Select * from films where director like ‘” & filtro & “‘”) ‘consulta sql”

         If hresul.Available = False Then

              message(“no hay resultados que coincidan con su búsqueda”)

        Else

       Endif

   mostrar

End

Las diferencias , marcadas en negrita , no eran insalvables. Y lo realmente medular, o sea la sentencia sql, es exactamente igual. Debía encontrar la forma de eliminar una de las dos y debía ser la segunda, ya que no devolvía la sentencia sql como variable sino que la ejecutaba directamente. Lo primero era crear u procedimiento único para lanzar los reportes por pantalla y ejecutar en él todo lo necesario.

Esta fue la solución:

Public Sub mostrar2()

     If valor <> “” Then

        cargartabla

        hresul = hconn.Exec(valor)

        mostrar

     Else

         tabla5.Clear

         Message(“No hay datos que coincidan”)

     Endif

End

Donde primero comprobamos que la sentencia no nos devuelva un valor vacío, lanzamos el exec con el parámetro valor, en caso contrario limpiamos la tabla para borrar búsquedas anteriores y mostramos el mensaje de aviso.

Esta porción de código me permitió eliminar 7 procedimientos casi iguales a sus pares, con el consiguiente ahorro y reutilización de código. Pero hay más.

Habìa una función que devolvìa un valor numèrico entero, para llamar a estos procedimientos en otra función posterior. Repasemos parte del còdigo.

 

Private Function elegir() ‘comprobar que casillas están seleccionadas

If chactor.Value And chactriz.value = False And chdirector.value = False And chtitulo.value = False And chanio.value = False Then
combinacion = 1
Else If
chactor.Value And chactriz.value And chdirector.value = False And chtitulo.value = False And chanio.value = False Then
combinacion = 2………….. etc

………………………………………………………………………………………………………………….

 

Public Sub combinar()
     If combinacion = 1 Then
            poractor
      Else If combinacion = 2 Then
         porambos
Else If combinacion = 3 Then………etc

…………………………………………………………………………………………………………………

Public Sub combinar2()
    If combinacion = 1 Then
            poractor1
    Else If combinacion = 2 Then
           porambos1
   Else If combinacion = 3 Then…………..etc

………………………………………………………………………………………………………………

De estos tres , sólo conservamos el primero, con la diferencia de que en lugar de devolver un número, llama directamente al procedimiento asociado.

Veamos como quedó:

Private Function elegir() ‘comprobar que casillas están seleccionadas

    If chactor.Value And chactriz.value = False And chdirector.value = False And chtitulo.value =         False And chanio.value = False Then
         poractor1
   Else If
     chactor.Value And chactriz.value And chdirector.value = False And chtitulo.value = False And       chanio.value = False Then
          porambos1

y continùa así en los 7 procedientos.

Anuncios
Esta entrada fue publicada en programación. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s