Consulta de Access a hora determinada

Quisiera que una consulta hecha en Access se hiciera cada 30 minutos y el resultado se guardara sin intervención mía.

3 Respuestas

Respuesta
1
Lo primero agradecerte la confianza depositada al hacerme este pregunta.
Lo que consultas, hay muchas de formas de hacerlo, pero te indico la que creo que es más sencilla:
- Lo primero es que definas la consulta como de Actualización o de Datos Anexados, dependiendo de si lo que quieres es asctualizar cada 30 minutos un/os unico/s registro/s existe/s ó quieres ir insertandoi registros como si fuera un histórico.
Una vez definido el tipo de la consulta, que hará que cada vez que la ejecutes manualmente (imitando que han pasado los 30 minutos) raealice la "guarda" de los datos tal y como pides.
- Ahora, para hacer que se ejecute cada 30 minutos, te recomiendo hacerlo por código comenzando a contar los primeros 30 min al efectuar un evento (click en un botón de un form, etc.) utiliza en él el código que te detallo. Si lo que quieres es que los 30 min. empiecen a contar desde el momento en que abres la BBDD, crea un modulo (llamalo por ejemplo Global) y en él crea una función con el código que te detallo, y crea una Macro llamada Autoexec que realice la función EjecutarCodigo y ejecute la función creada.
- Código:
'Definimos variables y constantes
Dim HoraInicial As Date
Const ConstTiempo = 30 'Aqui el tiempo que quieras en minutos
'Tomamos la fecha/Hora de inicio desde la que contar
HoraInicial = Now()
Do
'Permitimos hacer otras cosas con la BBDD al usuario, no dejando ésta "bloqueada" e "inhibida"
DoEvents
'Comparamos si ha pasado el tiempo desde la fecha inicial a la actual
If DateDiff("n", HoraInicial, Now()) >= ConstTiempo Then
'Evitamos que muestre mensaje de confirmación de actualización de datos/inserccion de la consulta
Docmd.SetWarnings False
'Ejecutamos la consulta
Docmd.RunSQL "CONSULTA"
'Restauramos los valores de aviso de modificación en registros
Docmd.SetWarnings False
'Recuperamos la nueva hora desde la que volver a empezar a contar
HoraInicial = Now()
End If
Loop
Tres cosas a tener en cuenta:
-Si cierras, obviamente, la BBDD se acabó el proceso.
- Esto puede tener un pequeño desfase de micro/mili segundos... Creo que es lo menos importante.
- Haz las pruebas poniendo la constante a 1 (q minuto), sino te puedes eternizar...)
Si tienes dudas o problemas coméntamelo y lo solucionaremos. Acabo de probar este mismo código ahora mnismo y es exactamente lo que pides...
Mi problema es que la base de datos tiene un nombre de usuario, nombre de servicio y clave, ¿dónde lo pongo? Y el resultado como lo guardo en una hoja excel por ejemplo.
Gracias.
De nuevo Sorbus!
Vamos a ve si nos centramos... je je je
Yo he contestado a lo que me indicabas... Ahora lo que me consultas es otra cosa muy distinta... vamos a ver...
- Para que esa consulta se ejecute cada cierto tiempo, la BBDD donde este la consulta debe de abrirse o estar abierta y mantenerse así, ok ¿?
- Ahora bien, ¿cómo pretendes iniciar el comienzo de la ejecución de esa aplicación? Pensaba que era simplemente al abrirla manualmente (introduciendo a mano el nombre de usuario, contraseña, ...), pero por lo que veo no es así...
¿Quieres, por ejemplo, que se abra y ejecute automáticamente al iniciar windows?
¿Quieres qué se abra y ejecute al efectuar un evento en otra aplicación o BBDD (por ejemplo un click en un botón?
Aclarame lo que pretendes y como pretendes hacerlko y te indico los pasos a seguir, ok ¿?
Unn saludo y espero tu respuesta.
Óscar L.M.V.
Antes de todo perdón si no me se expresar.
Lo que quiero en una consulta que tengo hecha desde Access a una base de datos ORACLE que está físicamente en otro ordenador poder hacerla cada 30 minutos de forma automática, o sea, que no este yo presente y el resultado se me vaya quedando grabado en una hoja excel para luego poder tratar los resultados, ya que las tablas que consulto cambian cada tres minutos. Espero que este claro, sino es así, mil perdones.
Gracias por soportarme.
No tienes porqué pdrir perdón... Pa eso tamos aquí...
Si ejecutas la consulta que te proponía en un mensaje anterior, ¿te pide usuario, contraseña, ..., para poder realizar la conexión con Oracle?
Si es así, debes utilizar el mismo código detallado anteriormente, pero en lugar de poner
DoCmd. OpenQuery "CONSULTA" (que acabo de ver que por error te puse DoCmd. RunSQL "CONSULTA" y no seri así... Seria como te indico aquí... Sorry...)
Deberias, por codigo, crear una conexion ADO, ODBC, o como quieras (recomiendo ADO), a la base de datos de ORACLE utilizando para la cadena de conexion el nombre de usuario, contraseña, etc., de acceso a Oracle, y realizar por codigo la consulta una vez abierta la conexion tambien por codigo. Por ejmplo, deberias utilizar algo como
- Recuperar por código los registros necesarios de la conexión a ORACLE e irlos insertando en la tabla de access...
Pero ya, todo esto es cosa de programación, código y de como quieras estructurarlo...
La base para hacer lo que quieres es la que te indico, pero lamentablemente la implementación de código depende unicamente de tus conocimientos y de ti mismo...
El realizar que aunque tu no estés la consulta se realice, es tan fácil como utilizar el código que te indicaba antes por ejemplo en la macro AUTOEXEC. Así, una vez abras (o pongas que se abra sola al abrir el windows) tu aplicación Access y la mantengas abierta, se estará ejecutando la consulta que quieras...
De todos modos, si tienes cualquier otra duda o consulta al respecto, no dudes en hacérmela llegar.
Y que sepas que no tengo porque soportarte ni disculparte nada... Aquí estamos para auydarnos, una y otra vez, y las veces que sean necesarias.
Un saludo. Suerte en tu desarrollo!
Óscar L.M.V.
Respuesta
1
No se si t sera de mucha ayuda, pero en los formularios hay un evento que funciona por intervalos de tiempo.Es el ultimo de la lista de eventos, en concreto se llama [Al Cronometro].
Para hacer lo que dices tendrías que poner el intervalo de tiempo que deseas (va en milisegundos) y poner el código que lance la consulta y te guarde los datos en la zona del evento que antes t he comentado.
Respuesta
1
Debes tener un formulario abierto continuamente y establecer la propiedad IntervalodelCronómetro a (30*60*1000) milisegundos, esto hace que se produzca el evento Timer del formulario cada 30 minutos. Ahora sólo necesitas meter en el evento 'Al cronómetro' de tu formulario una macro que ejecute tu consulta, o un cacho de código así:
Docmd. Openquery "miconsultadeactualización"
Para evitar los molestos mensajes "se van a actualizar xxx registros", mete antes del openquery una sentencia:
Docmd setwarnings false, y después no olvides meter otra: 'docms setwarnings true'
Suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas