Fallo al abrir dato desde consulta

Tengo una consulta relacionada con un cuadro de lista, de tal forma que al darle doble click me cambie de pestaña y obtenga el detalle de dicha selección, pero el problema viene que al eliminar registros me varia el registro que debería mostrar, ejemplo si le doy al registro 12 y tengo borrado el 11 me muestra el 13 mientras que si selecciono el 10 me muestra el 10 sin problema, el código que tengo puesto es el siguiente:

If Nz(Me.[ListaOrdenes], 0) <> 0 Then
DoCmd.OpenForm "Ordenes", acNormal
DoCmd.GoToRecord , "Ordenes", acGoTo, Me.[ListaOrdenes]
Me.Filter = "Numero de orden =" & Me.[ListaOrdenes]
Me.FilterOn = True
Else
MsgBox "NO HA SELECCIONADO NINGUNA ORDEN", vbCritical + vbOKOnly, "Error!!"
End If

Si me podéis ayudar se agradece.

2 respuestas

Respuesta
1

Alberto: Es normal que te ocurra lo que expones.

Supongamos que tienes 20 Registros Iniciales y eliminamos 11.

Nos quedarán del 1 al 10 y el 12 al 20, o sea 19 Registros. A mi modo de ver, si marcas un numero menor o igual que el 19 te mostrará datos, unos correctos y otros incorrectos.

En cambio si marcas el 20, creo que te dará error, porque el Registro 20 no existe.

Supongo que estás utilizando un Auto Numérico. Debes construir el Filtro de modo que te apunte a un Registro que exista. Saludos y Feliz año >> Jacinto

Buenos días, siento no poder contestar antes, justo es eso el problema, por eso quería saber como modificarlo para apuntar al registro exacto.

Alberto: En Access es prescriptivo encerrar entre Corchetes los Nombres que van separados y es opcional hacerlo en los que no van.

Ejemplo: "[Numero de orden]=" & Me.[ListaOrdenes] >> Es Obligado

"Numero de orden =" & Me.[ListaOrdenes] >> No lo admite Access

Mientras que si tu tienes >> NumeroDeOrden

Access admite >> "[NumeroDeOrden]=" & Me.[ListaOrdenes] y

"NumeroDeOrden =" & Me.[ListaOrdenes] porque los Corchetes  son opcionales.

Si haces una Prueba al declarar una variable, lo verás mejor.

Dim Numero de Orden As Integer >> te dará error

Dim NumeroDeOrden  As Integer >> Te lo admitirá.

Mis saludos >> Jacinto

Respuesta
1

El error lo tienes en esta línea, que yo creo que te sobra:

DoCmd.GoToRecord , "Ordenes", acGoTo, Me.[ListaOrdenes]

Si lo que quieres es que te vaya al registro del número de orden seleccionado, el código lo puedes dejar así:

If Nz(Me.[ListaOrdenes], 0) <> 0 Then
DoCmd.OpenForm "Ordenes", acNormal
Me.Filter = "Numero de orden =" & Me.[ListaOrdenes]
Me.FilterOn = True
Else
MsgBox "NO HA SELECCIONADO NINGUNA ORDEN", vbCritical + vbOKOnly, "Error!!"
End If

o aún más reducido:

If Nz(Me.[ListaOrdenes], 0) <> 0 Then
DoCmd.OpenForm "Ordenes", acNormal,,"Numero de orden =" & Me.[ListaOrdenes]
Else
MsgBox "NO HA SELECCIONADO NINGUNA ORDEN", vbCritical + vbOKOnly, "Error!!"
End If

Un saludo.


Un nuevo foro de Access, no dudes en pasarte: http://nksvaccessolutions.com/Foro/ 

Buenos días, y muchas gracias por contestar, justo esto era lo que buscaba pero me da error el código que mandas, en la primera opción siempre me sale el formulario en blanco, y en el segundo me da error 3075 , falta operador en la expresión numero de orden.

Sin ver tu BD es difícil decir dónde está el error, porque no sé ni cómo la tienes montada, ni dónde va ese código.

El primer código prueba así:

If Nz(Me.[ListaOrdenes], 0) <> 0 Then
DoCmd.OpenForm "Ordenes", acNormal
Forms("Ordenes").Filter = "Numero de orden =" & Me.[ListaOrdenes]
Forms("Ordenes").FilterOn = True
Else
MsgBox "NO HA SELECCIONADO NINGUNA ORDEN", vbCritical + vbOKOnly, "Error!!"
End If

El segundo te tendría que funcionar si los nombres son los correctos (y supongo que sí, si con el original te funcionaban). Pero prueba poniendo el filtro así:

"[Numero de orden] =" & Me.[ListaOrdenes]

Muchas gracias ya esta todo funcionando, aunque no entiendo porque no funciona de la forma abreviada de la primera opción si funciona, solo puse [numero de orden] y listo, pero te voy a pedir un favor si puede ser, y es que provee también con:

DoCmd.OpenForm "Ordenes", acNormal, , "[Numero de orden]=" & Me.[ListaOrdenes], no tendria que funcionar también así? al ponerle el criterio 

Sí, tendría que funcionarte, de hecho yo es la forma que uso para abrir un formulario en un registro concreto. Lo único que se me ocurre es que en la tabla/consulta el campo no se llame "Numero de orden", o bien, que ListaOrdenes no devuelva un valor numérico (que no creo que sea el caso)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas