Intervalo de tiempo access
Necesito un código de visual basic que me deje parada una función durante 3 minutos para que después continúe su ejecución. Utilizo access 97.
1 Respuesta
Respuesta de xavi -ae soft-
1
1
xavi -ae soft-, 20años de experiencia en programacion Access a razon de 10 horas...
Dado que la pregunta es genérica y aportas pocos datos, la respuesta también lo será.
Mira la propiedad Intervalo de cronometro y el evento Al cronometro.
Xavi
Mira la propiedad Intervalo de cronometro y el evento Al cronometro.
Xavi
A ver.. es una macro que ejecuto mediante un botón (nada más), en un formulario
Realiza una serie de consultas y por ultimo llama a una función
Dentro de esta función, se llama a otras 3
Lo que necesito es que entre una y otra (llamadas desde la función principal), el procedimiento esté parado 3minutos
No tengo mucha idea de visual basic... apenas sé nada, a ver si me puedes echar una mano y aclararme un poco más
Muchas gracias por contestar, un saludo
Realiza una serie de consultas y por ultimo llama a una función
Dentro de esta función, se llama a otras 3
Lo que necesito es que entre una y otra (llamadas desde la función principal), el procedimiento esté parado 3minutos
No tengo mucha idea de visual basic... apenas sé nada, a ver si me puedes echar una mano y aclararme un poco más
Muchas gracias por contestar, un saludo
Aunque no entiendo el porqué debe estar el proceso parado tres minutos, lo vamos a intentar.
Para empezar (y desde mi punto de vista) olvidate de la macro. Conviértela a código. La abres y la guardas como módulo (es una opción en el dialogo del Guardar como del menu archivo)
Ahora ya tienes la macro convertida a código. El siguiente paso es meter ese código en el evento Click de un botón. Vayamos al formulario dónde tienes el botón. Seleccionalo y, en la hoja de propiedades, dónde ahora llamas a la macro, bórralo. Clica en el botón del generador y selecciona Generador de código. Aparecemos en la ventana de edición de VBA, concretamente en el evento Click del botón en cuestión.
Ahí pegamos el código que Access nos ha convertido de la macro. Bien, ya tenemos que las acciones, en lugar de ejecutarse desde una macro, se ejecutan desde código. El resultado debería ser el mismo.
Vemos ahora como podemos esperar 3 minutos. Los formularios disponen de una propiedad llamada Intervalo de cronometro. Esa propiedad permite establecer unos ciclos de tiempo (en milisegundos). Cuando se cumple ese tiempo, se dispara el evento Al cronometro del formulario.
Visto esto, se trata de que, una vez finalizadas las acciones que hemos 'heradado' de la Macro, establezcamos el intervalo del cronometro. Añadimos esta linea al final del código:
Me.TimerInterval = 180000 ' es decir, 3 minutos, que son 180 segundos, que son 180000 milisegundos
Finalmente debemos añadir las acciones en el evento Al cronometro que deban realizarse una vez cumplido el tiempo.
Pones las acciones necesarias y, al final, dejas el TimerInterval a 0 para que no vuelva a repetirse el evento hasta que el usuario no vuelva a clicar el botón.
Me.TimerInterval = 0
De todas formas me tienes intrigado: ¿Porque necesitas que el ordenador se espere 3 minutos.
Y, aparte, me surge una duda: ¿El usuario no puede hacer nada durante esos 3 minutos?
Para empezar (y desde mi punto de vista) olvidate de la macro. Conviértela a código. La abres y la guardas como módulo (es una opción en el dialogo del Guardar como del menu archivo)
Ahora ya tienes la macro convertida a código. El siguiente paso es meter ese código en el evento Click de un botón. Vayamos al formulario dónde tienes el botón. Seleccionalo y, en la hoja de propiedades, dónde ahora llamas a la macro, bórralo. Clica en el botón del generador y selecciona Generador de código. Aparecemos en la ventana de edición de VBA, concretamente en el evento Click del botón en cuestión.
Ahí pegamos el código que Access nos ha convertido de la macro. Bien, ya tenemos que las acciones, en lugar de ejecutarse desde una macro, se ejecutan desde código. El resultado debería ser el mismo.
Vemos ahora como podemos esperar 3 minutos. Los formularios disponen de una propiedad llamada Intervalo de cronometro. Esa propiedad permite establecer unos ciclos de tiempo (en milisegundos). Cuando se cumple ese tiempo, se dispara el evento Al cronometro del formulario.
Visto esto, se trata de que, una vez finalizadas las acciones que hemos 'heradado' de la Macro, establezcamos el intervalo del cronometro. Añadimos esta linea al final del código:
Me.TimerInterval = 180000 ' es decir, 3 minutos, que son 180 segundos, que son 180000 milisegundos
Finalmente debemos añadir las acciones en el evento Al cronometro que deban realizarse una vez cumplido el tiempo.
Pones las acciones necesarias y, al final, dejas el TimerInterval a 0 para que no vuelva a repetirse el evento hasta que el usuario no vuelva a clicar el botón.
Me.TimerInterval = 0
De todas formas me tienes intrigado: ¿Porque necesitas que el ordenador se espere 3 minutos.
Y, aparte, me surge una duda: ¿El usuario no puede hacer nada durante esos 3 minutos?
Puff... no m entero muy bien... a ver si m explico mejor
Yo recibo una base de datos con información a diario, y esa base de datos la pego en un directorio en concreto, siempre, para que mi base de datos de access pueda tener vinculadas las tablas actualizadas
Entonces tengo un botón que me ejecuta una macro, que realiza una serie de consultas y después llama a una función que he hecho yo y está en el apartado de módulos
Eso me gustaría no tocarlo, porque hasta ahora funciona perfecto
La función no hace más que coger tablas y pasarlas a excel, es esta:
Function principal()
Dim proyecto As String
Dim version As String
proyecto = InputBox("Introduce el proyecto al que pertenece el archivo")
version = InputBox("Introduce la version del archivo")
catalogos proyecto, version
cursos proyecto, version
matriculas proyecto, version
End Function
Function catalogos(proyecto As String, version As String)
Dim ruta As String
ruta = "\\192.168.1.133\buzoncargaexcel\Entrada\CatalogoAccion_" & Format(Now, "YYYYMMDD") & "_v" & version & "_" & proyecto & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "MACRO_EXPORTACION_CATALOGO_ACCION", ruta, True, ""
End Function
Function cursos(proyecto As String, version As String)
Dim ruta As String
ruta = "\\192.168.1.133\buzoncargaexcel\Entrada\CursosBSCH_" & Format(Now, "YYYYMMDD") & "_v" & version & "_" & proyecto & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "MACRO_EXPORTACION_CURSO4", ruta, True, ""
End Function
Function matriculas(proyecto As String, version As String)
Dim ruta As String
ruta = "\\192.168.1.133\buzoncargaexcel\Entrada\Matriculas_" & Format(Now, "YYYYMMDD") & "_v" & version & "_" & proyecto & ".txt"
DoCmd.TransferText acExportDelim, "Exporta_Matrículas", "MACRO_EXPORTACION_MATRICULAS", ruta, True
End Function
Antes de nada decirte que yo se programar en c, pero no en visual, esta programación es super sencilla y lo conseguí mirando por internet...
Mi problema es que estos archivos se mandan a 1 buzón en donde hay un job(un programa que mira cada 3 minutos si hay algo nuevo en cierta carpeta), entonces necesito que estos archivos tengan una diferencia entre ellos de 3 minutos, ¿por qué?
Pues porque una información depende de otra, es decir, primero el buzón tiene que coger el primer archivo, meterlo en una tabla de base de datos, y realizar un procedimiento en pl/sql, el 2º archivo contiene información de la que depende el primero, entonces tiene que ser el primer archivo el que sea tratado antes, después el 2º y después el 3º, por eso necesito una diferencia de 3 minutos entre ellos...
Es decir que la función principal quedara algo así
Function principal()
Dim proyecto As String
Dim version As String
proyecto = InputBox("Introduce el proyecto al que pertenece el archivo")
version = InputBox("Introduce la version del archivo")
catalogos proyecto, version
(aqui un intervalo de 3 minutos parado)
Cursos proyecto, version
(Aquí un intervalo de 3 minutos parado)
Matriculas proyecto, version
End Function
Siento el tostón, y muchas gracias por contestar, un saludo.
Yo recibo una base de datos con información a diario, y esa base de datos la pego en un directorio en concreto, siempre, para que mi base de datos de access pueda tener vinculadas las tablas actualizadas
Entonces tengo un botón que me ejecuta una macro, que realiza una serie de consultas y después llama a una función que he hecho yo y está en el apartado de módulos
Eso me gustaría no tocarlo, porque hasta ahora funciona perfecto
La función no hace más que coger tablas y pasarlas a excel, es esta:
Function principal()
Dim proyecto As String
Dim version As String
proyecto = InputBox("Introduce el proyecto al que pertenece el archivo")
version = InputBox("Introduce la version del archivo")
catalogos proyecto, version
cursos proyecto, version
matriculas proyecto, version
End Function
Function catalogos(proyecto As String, version As String)
Dim ruta As String
ruta = "\\192.168.1.133\buzoncargaexcel\Entrada\CatalogoAccion_" & Format(Now, "YYYYMMDD") & "_v" & version & "_" & proyecto & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "MACRO_EXPORTACION_CATALOGO_ACCION", ruta, True, ""
End Function
Function cursos(proyecto As String, version As String)
Dim ruta As String
ruta = "\\192.168.1.133\buzoncargaexcel\Entrada\CursosBSCH_" & Format(Now, "YYYYMMDD") & "_v" & version & "_" & proyecto & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "MACRO_EXPORTACION_CURSO4", ruta, True, ""
End Function
Function matriculas(proyecto As String, version As String)
Dim ruta As String
ruta = "\\192.168.1.133\buzoncargaexcel\Entrada\Matriculas_" & Format(Now, "YYYYMMDD") & "_v" & version & "_" & proyecto & ".txt"
DoCmd.TransferText acExportDelim, "Exporta_Matrículas", "MACRO_EXPORTACION_MATRICULAS", ruta, True
End Function
Antes de nada decirte que yo se programar en c, pero no en visual, esta programación es super sencilla y lo conseguí mirando por internet...
Mi problema es que estos archivos se mandan a 1 buzón en donde hay un job(un programa que mira cada 3 minutos si hay algo nuevo en cierta carpeta), entonces necesito que estos archivos tengan una diferencia entre ellos de 3 minutos, ¿por qué?
Pues porque una información depende de otra, es decir, primero el buzón tiene que coger el primer archivo, meterlo en una tabla de base de datos, y realizar un procedimiento en pl/sql, el 2º archivo contiene información de la que depende el primero, entonces tiene que ser el primer archivo el que sea tratado antes, después el 2º y después el 3º, por eso necesito una diferencia de 3 minutos entre ellos...
Es decir que la función principal quedara algo así
Function principal()
Dim proyecto As String
Dim version As String
proyecto = InputBox("Introduce el proyecto al que pertenece el archivo")
version = InputBox("Introduce la version del archivo")
catalogos proyecto, version
(aqui un intervalo de 3 minutos parado)
Cursos proyecto, version
(Aquí un intervalo de 3 minutos parado)
Matriculas proyecto, version
End Function
Siento el tostón, y muchas gracias por contestar, un saludo.
Pues yo optaría por esta función en un módulo independiente:
Function EsperaSecs(Segundos As Single)
' Espera los segundos especificados en la ejecución del código
Dim Hora As Single
Hora = Timer
Do While Timer - Hora < Segundos
DoEvents
Loop
End Function
Ahí donde tu has puesto (aquí un intervalo...) pones:
EsperaSecs 180
Eso debería realizar una pausa de 3 minutos en el código.
Function EsperaSecs(Segundos As Single)
' Espera los segundos especificados en la ejecución del código
Dim Hora As Single
Hora = Timer
Do While Timer - Hora < Segundos
DoEvents
Loop
End Function
Ahí donde tu has puesto (aquí un intervalo...) pones:
EsperaSecs 180
Eso debería realizar una pausa de 3 minutos en el código.
- Compartir respuesta
- Anónimo
ahora mismo