Access - Problemas con procedimientos

 
Vista:
sin imagen de perfil

Problemas con procedimientos

Publicado por jfableon (7 intervenciones) el 15/01/2011 02:10:23
Hola a todos:

Deseo resolver una duda que tengo acerca de como se ejecutan los procedimientos en Access cuando se llaman dentro de varias lineas de comando.
Me ha pasado que algunos comandos posteriores al llamado de un procedimiento se ejecutan antes de terminar de ejecutar el procedimiento entero, lo cual me ha provocado errores.
Por ejemplo:

Dim a, b, c

Private Sub boton_click()
a = 2
b = 3
c = 0
sub_suma
b = 8
msgbox c
End Sub

Private Sub sub_suma()
'aqui viene muchas más lineas
c = a + b
End Sub

Podría darse que el procedimiento se demorara en ejecutarse y por tanto el msgbox mostrara como mensaje cero o 10 en vez de 5?
Access continua ejecutando con los comandos así el procedimiento no haya terminado?
Esto quiere decir que se debería implementar algo para que access espere el final del procedimiento antes de continuar?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con procedimientos

Publicado por pepe (67 intervenciones) el 15/01/2011 07:24:05
Tal cual expones el código el msgbox debe dar el resultado correcto. El motivo es que a pesar de que el código está dividido en 2 partes, la funcion boton_click() y la funcion sub_suma(), el código se ejecuta de manera secuencial sin que exista posibilidad de que c=0 o b = 8 alteren el resultado c = a + b.

Si msgbox c no muestra el valor adecuado es porque alguna de las variables globales a, b, c modifican su valor en alguna otra parte del código o algún otro evento activado al mismo tiempo (esto lo veo poco probable).

Revisa el código y depura el evento comprobando línea por línea los valores de dichas variables, aunque el mejor consejo es que evites usar variables globales, usa funciones con paso de parámetros.

Muchos programadores ven el uso de variables globales como una solucion fácil a la hora de tratar con datos, pero es muy desaconsejable esta práctica. Es cuestión de acostumbrarse.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Problemas con procedimientos

Publicado por jfableon (7 intervenciones) el 17/01/2011 15:50:10
Pepe gracias por su respuesta,

Sin embargo insisto, el problema real me pasa con una base de datos en la cual tengo unas tablas temporales de trabajo y esa información la coloco en las tablas de trabajo al momento que el usuario hace clic en Guardar. Si el programa hiciera todo secuencialmente haría lo siguiente:
- Comprobar que todos los datos son correctos
- Ejecutar la función para Guardar los datos en las tablas de trabajo
- Ejecutar la función para Borrar los datos en temporales
- Imprimir los datos

Generalmente el programa hace la secuencia correctamente pero a veces el programa lanza error al cliente en el segundo paso, diciendo que no encuentra los datos (final o en medio de la función), dejando el paso de datos a mitad como si los hubiera borrado mientras estaba en mitad del segundo paso. Lo malo es que solo le pasa al cliente y en todas las pruebas que he realizado no ha aparecido el error

Yo tengo entendido que VBA en Access ejecuta los comandos secuencialmente, pero esa experiencia me está generando dudas ya que he revisado el código muchas veces y secuencialmente está bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con procedimientos

Publicado por pepe (67 intervenciones) el 18/01/2011 06:18:46
Ok jfableon, el problema que expones es bien distinto. Independiente de usar VBA (lenguaje interpretado) o un ejecutable EXE, y sin meternos a hablar de como trabajan los procesadores hoy en día, el código se ejecuta secuencialmente, sería de locos si el PC fuera ejecutando las líneas que le diera la gana en cada momento. Ayudaría conocer el mensaje de error para determinar si se trata de un error del motor JET o si es un error en el código.

Teniendo en cuenta que el error lo genera el cliente y que en el resto de pruebas no se da el caso, apostaría a que el error tiene que ver con los datos introducidos en el primer paso, que de alguna manera, ya sea porque no son válidos o porque están sin rellenar, falla el segundo paso al intentar grabar dichos datos.

Creo que la suposición de que los datos temporales son borrados antes de guardarlos no es correcta. Yo intentaría indagar las circunstancias en las que se da el error y depurar paso a paso, con puntos de ruptura y variables de control de los datos para verificar en qué momento los datos dejan de ser válidos o "desaparecen".

Como ejemplo yo suelo usar contadores que se incrementan cada vez que se ejecuta una determinada función para saber si se ha ejecutado el numero de veces adecuado, o establecer variables booleanas que indiquen si se ha ejecutado primero el borrado y luego el grabado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Problemas con procedimientos

Publicado por jfableon (7 intervenciones) el 19/01/2011 04:28:27
Hola pepe,

Muchas gracias por su respuesta.
El error si dice que no se encuentran los datos en la tabla de temporales, y efectivamente si se han borrado.

Como le comenté yo había realizado pruebas, cuando me informaron el error y lo estuve investigando nunca me apareció y utilicé muchas de las técnicas que me indicas arriba pero no podía dar con el error.

Así que tomé la tarea de estar junto a la persona que usa la aplicación, hasta que encontré el problema, la persona alcanzaba a oprimir dos veces el botón antes que la ventana desapareciera (ya que primero realizaba todas las transacciones de verificación, copia a tablas de trabajo, eliminación de temporales) y luego si la ventana desaparecía. El programa estaba intentando hacer todo dos veces.

La solución, inhabilitar el botón al inicio del procedimiento. De esta forma la ventana continua visible hasta terminar el proceso.

Gracias por la colaboración
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar