Access - Access - Desplazamiento entre registros

 
Vista:

Access - Desplazamiento entre registros

Publicado por Juanxo (6 intervenciones) el 12/11/2006 15:44:11
Mi finalidad es evitar el uso de la barra de desplazamiento de registros que access te pone por defecto y hacer una similar creada por mi.
Mediante el siguiente codigo he conseguido ir enumerando los registros que contiene mi base de datos.

Private Sub Form_Current()
regcount = Me.RecordsetClone.RecordCount
regactual = Me.CurrentRecord
Me.Texto638 = "Registro " & regactual & " de " & regcount
End Sub

Tambien he creado 4 botones: Primero(|<),Anterior(<),siguiente(>)y ultimo(|>)

Como hago para que al dejar pulsado el boton "anterior" o "siguiente" se valla desplazando por los registros?
Como consigo que al estar en el ultimo registro se desactive el boton "siguiente"?
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:Access - Desplazamiento entre registros

Publicado por The Emulator (146 intervenciones) el 12/11/2006 16:34:47
Hola

Bueno no tienes que complicarte tanto......

Cuando estes en tu formulario mira que en la barra de controles(Donde estan los controles que colocas en los forms) hay un boton con una barita magia que se llama Asistentes para controles dale click y luego coloca un boton en el formulario al hacer eso aparecera un asistente para los botones, en la lista de Categorias selecciona Exploracion de registros y al lado derecho apareceran las opciones para moverte entre registros( Ir al primero, Ir al anterior, ir al siguiente, ir al ultimo entre otrossss) Simplemente sigue el asistente y cuando lo finalizes ese boton quedara con el codigo necesario para desplazarse.

Saludos
http://www.theemulator.tk
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

reiterar accion al mantener un click?

Publicado por Juanxo (6 intervenciones) el 12/11/2006 17:09:58
Esa forma me sirve para introducir los controles de desplazamiento.
Ahora si, comprueba que a diferencia de la barra de contorles de desplazamiento que vienen por defecto, si tu dejas pulsado el cursor sobre el boton "siguiente" que acabas de crear, el desplazamiento no avanza. Tan solo avanza una vez por cada vez que le pulses.
Como consigo que la accion de 'avanzar de registro' se reitere cuando mantengo el boton pulsado?
Como consigo que se desactive el boton siguiente|anterior cuando me encuentro en el ultimo|primer registro?
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:reiterar accion al mantener un click?

Publicado por The Emulator (146 intervenciones) el 12/11/2006 18:57:05
Hola

Hey disculpa creo que cuando lei tu mensaje estaba dormido porque no vi lo de que mientras se tenga precionado el boton que siguiera moviendose de registro.

Una forma seria programando los eventos mousedown y mouseup de los botones siguientes y anterior. la logica de eso seria asi:

Crear un procedimiento encargado de moverse al siguiente registro, en este procedimiento colocar un while que seria el encargado de ir recorriendo los registro, este while deberia llevar una bandera que seria la que le indique cuando salir del ciclo, esa bandera adquiere su valor al bajar el boton del mosuse sobre ese boton y al soltar el boton del mouse.

Al precionar el boton se asigna a la bandera un valor falso que le indicaria al ciclo while que no se salga, tambien seria aqui donde se llame al procedimineto que tenga el while

Al soltar el boton del mouse se le asigna el valor de true a la bandera para indicarle al ciclo que se debe detener

El codigo seria mas o menos asi.

NOTA ANTES DE CONTINUAR.
Este codigo lo hize en Visual Basic 6.0, no lo hize en Access por que en la maquina donde estoy no esta intalado, pero deberia funcionar en Access ya que son casi lo mismo a nivel de objetos y eventos.

------------------------Codigo-------------------------
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMS As Long)

Dim blnSalirCiclo As Boolean

Private Sub btnSiguiente_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnSalirCiclo = False
Siguiente
End Sub

Private Sub btnSiguiente_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnSalirCiclo = True
End Sub

Public Sub Siguiente()
While blnSalirCiclo = False
DoCmd.GoToRecord , , acNext
Sleep 10
DoEvents
Wend
End Sub

------------------------Fin Codigo-------------------------

Como vez esta hecha una declaracion al API de Windows eso es para poder hacer un pequeño tiempo de lapsus que se coloca dentro del while eso es para que los registros se delplazaen lentamente ya que si no se coloca pasarian tan rapído que pareceria que se hubiera precionado el boton ir al ultmio registro.

Luego esta preogramado el evento mouse down del boton en el que se inicializa la bandera y se llama al procedimineto encargado de ir pasando registro por registro.

Luego esta el evento mouseup en el que se le indica al ciclo while que debe salir

Por ultimo tenemos el procedimiento encargado de mover los registros en el cual esta el ciclo while, dentro de este while debes colocar todo el codigo correspondienete a moverse al siguiente registro, ya que yo solo coloque la orden de ir al siguiente falta que coloques la validacion correspondiente de si se encuentra en el ultimo registro que se haria con la propiedad eof del recordset que manejas.
Alli tambien esta el Sleep 20, el 20 indica 20 milisegundos asi que ese sera el lapsus para pasar al siguiente registro, luego viene la instruccion DoEvents que es para permitirle al programa responder a otros eventos y que no se quede bloqueado.

Bueno eso seria todo para el boton siguiente, para el de anterior seria repetir el metodo Siguiente pero decirle al while que se desplace al registro anterior, y programar los eventos correspondientes a ese boton.

Sin mas que decir espero que te sirva.

Saludos
http://www.theemulator.tk
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

Recorrer registros al mantener el click

Publicado por juanxo (6 intervenciones) el 13/11/2006 00:04:01
Ante todo muxisimas gracias por las molestias, pero esque no consigo sacarlo.
El codigo compila perfectamente, he leido tus trazas y tiene buena logica...
pero al probarlo no se porqué no me funciona correctamente. Lo he estado probando un monton de veces, modificandole algunas cosas pero no lo he conseguido;
---------- este es mi actual codigo --------------

Private Sub botonsiguiente_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnSalirCiclo = False
Siguiente
End Sub

Private Sub botonsiguiente_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnSalirCiclo = True
End Sub

Public Sub Siguiente()
While blnSalirCiclo = False
DoCmd.GoToRecord , , acNext
Sleep 10
DoEvents
Wend
End Sub

---------------------fin codigo--------------------------

Al presionar el boton comienza a iterar (como si pulsaras el boton repetidas veces) pero cuando levantas el dedo del raton no se inmuta y sigue recorriendo el bucle.
En ocasiones he conseguido interrumpir el bucle haciendo un doble click...
no parece entrar bien en la funcion MouseUp.

Existen otros comandos interesantes para el boton 'siguiente' como: MouseMove o KeyPress. no sé si podrian combinar con lo anterior y ser de alguna utilidad
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:Recorrer registros al mantener el click

Publicado por The Emulator (146 intervenciones) el 13/11/2006 03:59:05
Hola

Bueno ya lo revise en Access y tienes razon, recuerda que yo lo havia hecho en Visual Basic 6.0 y por eso no sabia si funciona bien en Access.

Lo raro es porque el Access no reconoce el mouesup cuando esta en algun procedimiento es como si dejara de escuchar eventos y eso que esta el DoEvents.

Bueno con respecto a los otros eventos que mensionas no servirian ya que el MouseMove se ejecuta cuando el usuario mueve el mouse por encima del boton, este se podria implementar junto con el MouseDown y el MouseUp pero no tendria sentido ya que si el usuario preciona el boton pero no lo mueve no se ejecutaria el codigo, o simplemente programar que al mover el mouse encima del boton se mueva al siguiente registro pero volvemos a lo mismo si lo deja quieto no pasa nada.

El KeyPress si lo puedes implementar para que mientras se tenga una tecla precionada se mueva entre los registros al soltar la tecla deja de moverse, esi si funciona bien pero no tiene nada que ver con el mouse pero si lo quieres hacer asi te servira.

Bueno seguire mirando como se puede corregir eso.

Saludos
http://www.theemulator.tk
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:Recorrer registros al mantener el click

Publicado por mi menda (1111 intervenciones) el 13/11/2006 05:31:40
Leyendo el hilo, se me ha ocurrido, ¿Porqué tener que estar pulsando el ratón,
Sí se puede hacer automático?.
He hecho a manera de ejemplo el botón cmdSigue (avanza registro), dentro de un cuadro (el cuadro sirve para parar el avance automático), aunque cada uno lo puede adaptar como quiera. No se mucho de VB, así que si os gusta y lo mejorais, ponerlo aquí. Bueno aquí va:

Option Compare Database
Dim RegActual As Integer
Dim TotalReg As Integer
Dim SeguirReg As Boolean

Private Sub cmdSigue_Click()
SeguirReg = True
Me.TimerInterval = 500
If RegActual = TotalReg Then
SeguirReg = False
MsgBox "Ultimo Registro"
Exit Sub
End If
DoCmd.GoToRecord , , acNext
End Sub

Private Sub Cuadro52_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
SeguirReg = False
End Sub

Private Sub Form_Current()
RegActual = Me.CurrentRecord
TotalReg = DCount("[IdCampo]", "Tabla")
End Sub

Private Sub Form_Timer()

If SeguirReg = True Then
cmdSigue_Click
End If

End Sub
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