¿Cómo actualizar en el mismo registro de ingreso la hora de salida en mi tabla?

Tengo una tabla donde guardo el ingreso del usuario al sistema, ahora quisiera actualizar en el mismo registro de ingreso la Hora de salida. He probado esta rutina pero no lo hace, Tampoco da error. La HoraSalida queda con un valor null. ¿Qué estoy haciendo mal?
Private Sub Form_Close()
Dim rst1 As ADODB.Recordset
Dim string1 As String
Dim HoraSalida As Date
'
Set rst1 = New ADODB.Recordset
rst1.ActiveConnection = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Prueba\ControlAcceso.mdb;"
rst1.CursorType = adOpenKeyset
rst1.LockType = adLockOptimistic
rst1.Index = "Usuario"
rst1.Open "Acceso", , , , adCmdTableDirect
'Guardar
string1 = CurrentUser
rst1.Seek string1
Do Until rst1("Usuario") = string1
If rst1("Usuario") = string1 Then
Debug.Print rst1("Usuario"), rst1("HoraEntrada")
rst1("HoraSalida") = Now
rest1.Update
End If
rst1.MoveNext
If rst1.EOF Then Exit Do
Loop
Rst1. Close

1 Respuesta

Respuesta
1
Tienes razón, el método edit no está para ado. A ver, ¿tienes las referencias activadas? (Supongo que sí por cómo veo la declaración de rst1). La cuestión es ¿por qué quieres hacer así la actualización? ¿No sería más práctico que lo hicieras con una consulta sql? La consulta sería de la siguiente manera para este caso:
Asignas la conexión a una variable, por ejemplo con y haces:
cn.execute "UPDATE acceso SET horasalida = #" & now() & "# WHERE usuario = '" & string1 & "'"
Imagino que hay que restructurar todo el código. Cambiando el modulo guardar por la instrucción que me estas enviado y declarar la variable con como connection. Si hay otros cambios házmelo saber... gracias
Haz rst1. Edit justo después del rst1. Open
Le agregue la instrucción rst1.edit y ahora me da un error de compilación en esa línea..."No se encontró el método o dato miembro"
Hice los cambios pero en la linea que tu me enviaste me da el siguiente error "variable de objeto o bloque with no establecido": y disculpa la molestia:
Private Sub Form_Close()
Dim rst1 As ADODB.Recordset
Dim string1 As String
Dim cn As ADODB.Connection
On Error GoTo Err_Form_Close
'
Set rst1 = New ADODB.Recordset
rst1.ActiveConnection = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Prueba\ControlAcceso.mdb;"
rst1.CursorType = adOpenKeyset
rst1.LockType = adLockOptimistic
rst1.Index = "Usuario"
rst1.Open "Acceso", , , , adCmdTableDirect
'Guardar
string1 = CurrentUser
cn.Execute "UPDATE Acceso SET HoraSalida = #" & Now() & "# WHERE Usuario = '" & string1 & "'"
Exit Sub
Err_Form_Close:
MsgBox Err.Description, Err.Number
' Resume exit_Form_Close
End Sub
Efectivamente, tienes que reestructurar el código que me enviaste con la pregunta. En principio con eso bastaría, si tienes más problemas házmelo saber.
El update lo estás haciendo sobre "rest1" en lugar de sobre "rst1".
Gracias amigo hice el cambio pero aún no me actualiza
No te preocupes, que no es ninguna molestia, para eso estamos.
Te falta poner una línea donde asignes la conexión a la variable con, por ejemplo así:
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data SourceC:\Prueba\ControlAcceso.mdb;"
De todas formas... ¿Tienes hotmail? Me puedes encontrar normalmente en [email protected] , suelo estar en horario de oficina.
No. No se está haciendo lo mismo en rst1, si no se lo asignas a con no entenderá dónde tiene que hacer el execute. Creo que hay algo que debes tener mal. Mira en las referencias... Quizás la causa del error esté en que te falte o no tengas marcada la que toca. De todas formas te aseguro que es así, ya que es lo que utilizo en todos mis programas...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas