Error ocasional al ejecutar el comando DoCmd.GoToRecord , , acNext

Tengo un subformulario que, siempre que se abre, ejecuta el siguiente código:

Dim treg As Long
Dim tdes As Long
txt_expedientes = DCount("Id", "Expedientes")
MsgBox txt_expedientes
Dim i As Integer
For i = 1 To Form.Recordset.RecordCount
[Edad] = Age(Nacimiento)
MsgBox i
If i = DCount("Id", "Expedientes") Then
    Exit For
End If
DoCmd.GoToRecord , , acNext
Next
Txt_destruir = DCount("Id", "expedientes", "Edad>21")

Básicamente, lo que hace es revisar la edad de los alumnos que están en la tabla "expedientes". Desde el primer registro, hasta el último, va actualizando la edad de cada niño. El problema es que, a veces, me da un error en la linea DoCmd. GotoRecord,, acNext con el mensaje "La acción o comando "Ir al registro" no está disponible ahoa.

¿Qué puedo hacer?

2 respuestas

Respuesta
1

Probablemente sea porque el origen del formulario sea una consulta de datos agrupados. De todas formas, ¿Para qué poner un botón para actualizar la edad? Vamos a suponer que la tabla se llama Alumnos y que tiene un campo FechaNac y, si quieres, aunque no haga falta, un campo Edad. En el evento Al cargar del formulario( o en cualquier otro evento) poner

Docmd.setwarnings False

docmd.runsql"update alumnos set edad=Fix(datediff("d",Fechanac,Date())/365.24)"

De forma que cada vez que abras el formulario o se ejecute el otro evento te actualiza la edad de los alumnos sin tener que esperar.

En caso de que no existiera ese campo Edad, pero si un control llamado así en el formulario, es cuando puedes usar lo de

for i....

Se trata de una tabla. En cuando al código

docmd.runsql"update alumnos set edad=Fix(datediff("d",Fechanac,Date())/365.24)"

Debe tener algún error. Se para en "d", pero desconozco cómo solucionarlo

Siempre aconsejo poner una imagen para saber donde se va a usar la instrucción, ya que en función de ello, se escribe de una forma u otra. Vamos a suponer que tengo una tabla Alumnos, donde le pongo una edad incorrecta para que veas como la corrige

En este caso, en el evento Al cargar de un formulario cualquiera, pero ya te dije que se puede poner en cualquier evento, tengo puesto

Private Sub Form_Load()
DoCmd.SetWarnings False
DoCmd.RunSQL "update alumnos set edad=fix(datediff(""d"",fechanac,date())/365.24)"
End Sub

De forma que en el momento que lo abro, me deja la tabla como

Pero no es necesario que haya un campo Edad, ya que ésta varía con los días. Lo que nunca cambia, excepto en las mujeres que siempre son jóvenes, es la fecha de nacimiento. Por eso, en el formulario, se puede poner un cuadro de texto independiente llamado Edad, y en el evento Al activar el registro poner

edad=fix(datediff("d",fechanac,Date())/365.24)

Con lo que cada vez que "visites" ese registro tendrás la edad actualizada.

Observa que aquí la d sólo lleva unas comillas, mientras que en la instrucción lleva dos, porque antes de Update ya hay una.

Respuesta
1

Estoy de acuerdo con la respuesta que le dan hay varias incoherencias en su código el GotoRecord debe ir después de

Un else y el dcount por eso el error si ya alcanzo el final del recordset no existe un siguiente. Le recomiendo no actualizar con formularios clonados dan problema hágalo con sentencia UPDATE.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas