Access - pausar el evento "al salir"

 
Vista:
sin imagen de perfil

pausar el evento "al salir"

Publicado por anonymous (4 intervenciones) el 30/05/2016 15:33:47
Hola a todos,

ante todo presentarme, soy nuevo en el foro, un saludo a todos :D

vereis, tengo un campo que utilizo para realizar búsquedas
y lo he configurado de forma que, yo escribo el número en el campo, y como el Enter de forma predeterminada me desplaza al siguiente campo, he puesto como evento "Al salir" para que me realice la búsqueda de ese valor.

El problema es que, una vez pulso Enter, sí me hace la búsqueda, pero no me deja hacer nada, pues no puedo entrar en los otros campos del registro que he buscado porque estoy "saliendo" del campo (pues estoy haciendo click fuera), y por lo tanto en cada click se recarga de nuevo la búsqueda. Tampoco puedo eliminar el número que estoy buscando del campo, porque entonces me busca un registro con un texto vacío

No sé si me he explicado bien, alguien tiene alguna idea de lo que podría hacer para pausar o parar esa acción? he probado cancelevent pero luego no me deja volver a buscar otro número :(

Gracias

Un saludo :)
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
sin imagen de perfil

pausar el evento "al salir"

Publicado por José María (4 intervenciones) el 31/05/2016 13:35:06
Para utilizar un campo de un formulario para hacer búsquedas te aconsejo que el código lo pongas o bien en el evento después de actualizar del propio campo o bien en el evento al hacer click de un botón que puedes poner al lado, lo hagas como lo hagas lo primero que tienes que hacer es preguntar si el campo búsqueda está relleno y si lo está entonces que se ejecute lo que le pongas
Si no te aclaras te pongo un ejemplo de código.
Saludos
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

pausar el evento "al salir"

Publicado por anonymous (4 intervenciones) el 01/06/2016 10:51:21
Hola,

el tema es que ahora ya mismo ya hay un botón al lado para realizar la búsqueda, pero se trata de búsquedas de valores numéricos que hay que hacer de forma muy rápida, repetitiva y seguida, y realmente el hecho de tener que cambiar de teclado a ratón hace perder segundos y es molesto, por eso miraba la manera de hacerlo con el enter, y el que hizo la base de datos ya no está.

El código que estaba usando es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub W_Tic_Exit(Cancel As Integer)
 
Dim selecio As String
    'filtra
    x = consulta(selecio)
    Me.FilterOn = False
    Me.Filter = selecio
    Me.FilterOn = True
    'Me.Requery
    Me.Registres.Value = Me.Recordset.RecordCount
    Me.Refresh
DoCmd.CancelEvent
 
End Sub

Todo lo que hay dentro del sub es el mismo código que tiene el botón de al lado para realizar la búsqueda haciendo click.
W_Tic es el nombre del campo

Ahora mirando he probado a que se realizara esta acción pero con evento "al pulsar una tecla" y especificando el Enter, con ese código:

1
2
3
4
5
6
7
8
Private Sub W_Tic_KeyDown(KeyCode As Integer, Shift As Integer)
 
    If KeyCode = 13 Then
 
    (el mismo código)
 
    End If
End Sub

y al principio me daba un error y no me dejaba guardar, lo he vuelto a escribir manualmente y ahora me funciona pero tengo que pulsar el enter 2 veces

alguna idea? Si pudiera hacerlo pulsando el Enter solo una vez sería lo suyo

gracias :D
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

pausar el evento "al salir"

Publicado por José María (4 intervenciones) el 01/06/2016 11:35:09
No entiendo porqué tienes que pulsar 2 veces la tecla enter, si estás con el foco en el campo te debería ejecutar el código al detectar que la el código de tecla es el 13 de Intro como muy bien has puesto.
Prueba a quitar la instrucción DoCmd.CancelEvent a ver si es por eso y si no ponle un break point en la primera instrucción "x = consulta(selecio)" y ejecutalo paso a paso con F8 para ver por que tienes que pulsar 2 veces.
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

pausar el evento "al salir"

Publicado por anonymous (4 intervenciones) el 01/06/2016 16:43:00
Hola,

he borrado el cancelEvent y sigue igual, he probado a hacer lo del breakpoint pero diría que no me ha salido muy bien;

empieza en la primera línea, y en lugar de pasar a la segunda (filteron = false) salta a otra función que no está en la misma.. "página" por así llamarlo que donde están los eventos y el código del botón por ejemplo..; en la función va saltando campos hasta llegar aquí:

1
2
3
4
5
6
7
8
If Forms!Manteniments.W_Tic.Value <> "" Then
		If Condicion = 0 Then
			seleccion = "tiquet like '*" & Forms!Mantenimientos.W_Tic.Value & "*'"
			Condicion = Condicion + 1
		Else
			seleccion = seleccion + " and tiquet like '*" & Forms!Mantenimientos.W_Tic.Value & "*'"
	End If
End If

este campo lo recorre dentro del If, luego sigue en filterOn=false y antes de la siguiente, otra función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Form_Current()
    If Me.ESTAT.Value = "Cerrado" Then
        Me.AllowEdits = False
        Me.AllowDeletions = False
        lbl_CapTiquet.Caption = "REGISTRO BLOQUEADO - Mantenimiento solicitud seleccionada"
        lbl_CapTiquet.FontSize = 10
    Else
        Me.AllowEdits = True
        Me.AllowDeletions = True
        lbl_CapTiquet.Caption = "Mantenimiento solicitud seleccionada"
        lbl_CapTiquet.FontSize = 8
    End If
    If Len(Me.ESTADO) > 0 Then
            tipo_estado = Me.ESTADO.Value
    End If
 
    'ECB MAR2016
    Me.Texto178.Locked = False
    Me.PRECIO_UNITARIO.Locked = False
End Sub

aquí se detiene en el Else y lo completa, luego salta la linea de filter=selecio, filteron=true, y luego vuelve a exactamente la misma función que antes (justo la de aquí encima), y en lugar de "recorrer" el Else, esta vez recorre el If... luego ya vuelve al codigo del evento y lo termina..

yo la verdad no tengo mucha idea de visual basic pero no veo donde podría fallar o porque con el 1er Enter no se ejecuta..

gracias un saludo
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

pausar el evento "al salir"

Publicado por José María (4 intervenciones) el 01/06/2016 18:52:06
El procedimiento consulta te está montando la select para que te filtre si has metido algo en el campo W_tic y el procedimiento privado Form_Current está habilitando la edición del registro activo dependiendo de la variable estat.
Bueno vamos a probar otra cosa, quitale el break point y añade en todos los sub o function afectados un control de errores, te pongo yo como tiene que ser el exit del W_tic y tú le haces lo mismo a los demás:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub W_Tic_Exit(Cancel As Integer)
On Error GoTo Errores
 
Dim selecio As String
    'filtra
    x = consulta(selecio)
    Me.FilterOn = False
    Me.Filter = selecio
    Me.FilterOn = True
    'Me.Requery
    Me.Registres.Value = Me.Recordset.RecordCount
    Me.Refresh
DoCmd.CancelEvent
 
salida:
   Exit Sub  'Si fuese una funcion sería Exit Function
Errores:
   MsgBox (Err.Number & "." & Err.Description)
   Resume salida
End Sub  ' Si fuese una funcion sería En Function

Es posible que esté fallando en algún sitio y con esto lo verás, ejecútalo y si te dá algún mensaje de error vemos a ver que puede ser.
Si no da error hay que volver a poner el break point fijándote bien donde para antes de que vuelvas a tener que pulsar enter.

Suerte y me cuentas
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