Condición para stLinkCriteria falla

Estoy desarrollando un formulario que modifique un registro pero no se como abrir el formulario por el registro adecuado. El registro debe cumplir que el campo usuario sea igual al usuario actual de Windows. El código es éste:
stLinkCriteria = "[Horario Asistencia]![usuario] = " & Environ("UserName")
stDocName = "Salida"
DoCmd. OpenForm stDocName,,, stLinkCriteria
Pues no me funciona como quiero, me salta una venta con un cuadro de texto en blanco, el cual si relleno con mi usuario el formulario funciona.

1 respuesta

Respuesta
1
Environ("UserName") devuelve una cadena de texto... por lo que deberás indicarlo así en el filtro:
strLinkCriteria = "[Horario Asistencia]![usuario] = '" & Environ("UserName") & "'"
Muchas gracias Xavi por tu tiempo:
No consigo que me funcione el código. Te paso la tabla para explicar mejor cual es el problema.
Tabla "Horario Asistencia"
usuario Dia EntradaHora SalidaHora
alvarez 30/09/2009 7:45 15:00
alvarez 01/10/2009 8:00
vazquez 30/09/2009 7:35 15:20
vazquez 01/10/2009 7:10
Yo soy el usuario Álvarez. La función Environ("UserName") funciona perfectamente. Quiero modificar el registro de Álvarez de hoy día 1/10 donde el campo SalidaHora está vacío. Abro el formulario con la condición strLinkCriteria = "[Horario Asistencia]![usuario] = '" & Environ("UserName") & "'" , pero en vez de irse al registro de mi usuario se va al último registro de la tabla, al del usuario vazquez. No veo donde está el fallo. Te paso el código que no funciona.
Dim stDocName As String
Dim stLinkCriteria As String
    strLinkCriteria = "[Horario Asistencia]![usuario] = '" & Environ("UserName") & "'"
    MsgBox "El usuario actual del Pc es: " & Environ("UserName")
    stDocName = "Salida"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Entiendo que el criterio deberia incluir 3 condiciones: usuario = usuario actual, dia = hoy y SalidaHora =  Nulo
strLinkCriteria = "Usuario = '" & Environ("UserName") & "' And Dia = #" & Format(Date, "mm/dd/yyyy") & "# And SalidaHora Is Null"
En cuanto a la posición en la que se aparece en el formulario de destino... verifica que no tengas ningún código que, al abrir el formulario, se posicione en el ultimo registro (DoCmd. GoToRecord,, acLast o algo parecido)
Xavi
Hola Xavi:
Encontré que efectivamente se abría en el último registro con el acLast y he comentado esta línea. No se si comentarla o hay que modificarla.
Private Sub Form_Open(Cancel As Integer)
'DoCmd.GoToRecord , , acLast
End Sub
Aún así sigue fallando. Ahora se va al primer registro de la tabla. Parece ser que falla en el stLinkCriteria en el campo Día. Lo he podido comprobar reduciendo la tabla a solo un usuario y todos con las horas de entrada y salida.
usuario Dia EntradaHora SalidaHora
alvarez 29/09/2009 7:59 14:59
alvarez 30/09/2009 8:00 15:00
alvarez 01/10/2009 8:01 15:01
He cambiado el código para que modifique el registro de hoy (da igual el usuario porque todos son el mismo):
strLinkCriteria = "Dia = " & Format(Date, "dd/mm/yyyy") & ""
stDocName = "Salida"
DoCmd.OpenForm stDocName, , , stLinkCriteria
¿Puede estar el fallo que el registro Día es de tipo fecha corta y que strLinkCriteria es de tipo string?
Muchas muchas gracias de antemano. No se como agradecértelo.
Ojo con el formato a aplicar en la fecha. Yo he utilizado el formato 'americano' (que es el que entiende Access) y tu lo has cambiado.
Estoy desesperado. Tampoco funciona poniendo mm/dd/yyyy. He probado incluso poniendo manualmente la fecha en americano, español, de mil y maneras y nada, también falla. He probado todo esto
strLinkCriteria = "Dia = '&10/01/2009&'"
strLinkCriteria = "Dia = '&01/10/2009&'"
strLinkCriteria = "Dia = '#10/01/2009#'"
strLinkCriteria = "Dia = '#01/10/2009&'"
Me sigue abriendo el primer registro.
He hecho una consulta y en criterio he puesto #01/10/2009# y funciona perfectamente, solo me muestra en pantalla la única fila de la tabla que cumple la condición.
Ya no se que hacer.
Si quieres, mandame la bdd (mínima expresión necesaria) comprimida y lo miro en cuanto tenga un momento.
[email protected]
Recuerda quitar el QUITAESTO de la dirección, que muchos dicen que se lo rebota (que poco se fijan xd)
Enviado.
Enviado de nuevo.
Muchas gracias por tu tiempo!
¿Le has podido echar un vistazo a la BD? Muchas gracias!
Mil perdones por la demora.
Se trata de un error de tecleo. Tu asignas el filtro a la variable strLinkCriteria (fíjate en la r), pero después utilizas la variable stLinkCriteria en la llamada al formulario.
Si te acostumbras a poner, arriba de todo de los módulos: Option Explicit, ello te obligará a declarar las variables utilizadas y el error lo habrías detectado a la primera.
Al principio parece un rollo esto de estar declarando las variables, pero es mucho más práctico de lo que parece (de entrada de habrías ahorrado el 'problema')
También puedes predeterminar que, cada nuevo módulo, incluya esa línea: Herramientas / Opciones / Editar / Requerir declaración de variables.
Xavi

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas