No puedo actualizar datos de una consulta con recordset.edit
Publicado por HJR (1 intervención) el 05/09/2012 22:27:25
Hola, ante todo gracias de antemano por las dudas que he despejado consultando las dudas planteadas por los usuarios del foro. Estoy diseñando una base de datos en access 2003 que controla los proyectos a realizar y los procesos que componen cada proyecto, necesito que cuando hayan pasado 15 días desde la finalización del proceso (que no del proyecto) access envíe un mail automático al responsable del mismo, para ello tengo cuatro tablas, una de proyectos, una de procesos, otra de relación entre proyectos y procesos, y otra con las direcciones de mail de los responsables. He realizado una consulta en la que figuran en cada fila Código de proyecto, código de proceso (pueden ser varios por cada proyecto), los datos de la direccion de mail, y un campo llamado RECOR_15DIAS de tipo True/False que quiero marcar cuando se haya enviado el mail para evitar filtrando en la consulta que se vuelvan a enviar de nuevo. El código al que he llegado despues de ver varias páginas y consultas en la red es el que adjunto, funciona todo bien pero a la hora de actualizar el con rst.edit me sale un mensaje de error:
Error 3027. No se puede actualiza. Base de datos u objeto de solo lectura.
¿puede ayudarme alguien? he probado de todo y no se que más hacer
Dim vMail As Variant
Dim vCC As String
Dim vAsunto As Variant
Dim vMensaje As Variant
Dim vCodigo As Variant
Dim vNombre As Variant
Dim vEnvio As Variant
Dim CodProy_0 As Double
Dim CodProy As Double
Dim rst As DAO.Recordset
Dim dbs As DAO.Database
'Creamos el Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("CValidacion15dias", dbOpenDynaset)
'Si la consulta no da ningún registro sale un mensaje de advertencia y sale del proceso
If rst.RecordCount = 0 Then
MsgBox "No hay mails de validación de 15 días a enviar", vbCritical, "AVISO"
GoTo SALIDA
End If
'Nos movemos al primer registro
rst.MoveFirst
'Establecemos el comparador de codigo de proyectos a cero
CodProy_0 = 0
'Iniciamos el recorrido de registros
Do Until rst.EOF
CodProy = rst.Fields("CODIGO_PROYECTO").Value
If CodProy <> CodProy_0 Then
'Cogemos el valor del destinatario
vMail = rst.Fields("MAIL").Value
vCC = "[email protected]"
'Cogemos el código del proceso
vCodigo = rst.Fields("CODIGO_NUEVO").Value
'Cogemos el nombre del proceso
vNombre = rst.Fields("NOMBRE_PROCESO").Value
'Cogemos la fecha de envio a validacion
vEnvio = rst.Fields("ENVIO_VALIDACION")
'Creamos el asunto del correo
vAsunto = "Recordatorio de procesos pendientes de validar"
If StrPtr(vAsunto) = 0 Then GoTo SALIDA
'Creamos el mensaje del correo
vMensaje = "Buenas tardes," & vbCrLf & vbCrLf & "Los procesos correspondinetes al proyecto: " & CodProy & " - " & vNombre & " han finalizado hace 15 días." & vbCrLf & vbCrLf & "Un saludo"
If StrPtr(vMensaje) = 0 Then GoTo SALIDA
'Abrimos el informe con los procesos asociados
DoCmd.OpenReport "IValidacion15dias", acPreview, , "[CODIGO_PROYECTO]=" & CodProy
'Lanzamos el mail
DoCmd.SendObject acSendReport, "IValidacion15dias", "Formato Snapshot (*.snp)", vMail, vCC, , vAsunto, vMensaje, 1
'Cerramos el informe con los procesos asociados
DoCmd.Close
'Marcamos el campo de recordatorio 15 dias
rst.Edit
rst![RECOR_15DIAS] = True
rst.Update
'Si no existe Codigo de Proyecto pasamos al siguiente registro
If IsNull(MAIL) Then GoTo Siguiente
'Si el codigo de proyecto es igual al del registro anterior pasamos al siguiente
Else: GoTo Siguiente
End If
Siguiente:
'Guardamos el valor del Codigo de Proyecto para compararlo despues
CodProy_0 = rst.Fields("CODIGO_PROYECTO").Value
'Nos movemos al registro siguiente
rst.MoveNext
Loop
SALIDA:
'Cerramos conexiones y liberamos memoria
rst.Close
dbs.Close
Set rst = Nothing
Set dbs = Nothing
Exit Sub
Sol_err:
Resume SALIDA:
End Sub
Error 3027. No se puede actualiza. Base de datos u objeto de solo lectura.
¿puede ayudarme alguien? he probado de todo y no se que más hacer
Dim vMail As Variant
Dim vCC As String
Dim vAsunto As Variant
Dim vMensaje As Variant
Dim vCodigo As Variant
Dim vNombre As Variant
Dim vEnvio As Variant
Dim CodProy_0 As Double
Dim CodProy As Double
Dim rst As DAO.Recordset
Dim dbs As DAO.Database
'Creamos el Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("CValidacion15dias", dbOpenDynaset)
'Si la consulta no da ningún registro sale un mensaje de advertencia y sale del proceso
If rst.RecordCount = 0 Then
MsgBox "No hay mails de validación de 15 días a enviar", vbCritical, "AVISO"
GoTo SALIDA
End If
'Nos movemos al primer registro
rst.MoveFirst
'Establecemos el comparador de codigo de proyectos a cero
CodProy_0 = 0
'Iniciamos el recorrido de registros
Do Until rst.EOF
CodProy = rst.Fields("CODIGO_PROYECTO").Value
If CodProy <> CodProy_0 Then
'Cogemos el valor del destinatario
vMail = rst.Fields("MAIL").Value
vCC = "[email protected]"
'Cogemos el código del proceso
vCodigo = rst.Fields("CODIGO_NUEVO").Value
'Cogemos el nombre del proceso
vNombre = rst.Fields("NOMBRE_PROCESO").Value
'Cogemos la fecha de envio a validacion
vEnvio = rst.Fields("ENVIO_VALIDACION")
'Creamos el asunto del correo
vAsunto = "Recordatorio de procesos pendientes de validar"
If StrPtr(vAsunto) = 0 Then GoTo SALIDA
'Creamos el mensaje del correo
vMensaje = "Buenas tardes," & vbCrLf & vbCrLf & "Los procesos correspondinetes al proyecto: " & CodProy & " - " & vNombre & " han finalizado hace 15 días." & vbCrLf & vbCrLf & "Un saludo"
If StrPtr(vMensaje) = 0 Then GoTo SALIDA
'Abrimos el informe con los procesos asociados
DoCmd.OpenReport "IValidacion15dias", acPreview, , "[CODIGO_PROYECTO]=" & CodProy
'Lanzamos el mail
DoCmd.SendObject acSendReport, "IValidacion15dias", "Formato Snapshot (*.snp)", vMail, vCC, , vAsunto, vMensaje, 1
'Cerramos el informe con los procesos asociados
DoCmd.Close
'Marcamos el campo de recordatorio 15 dias
rst.Edit
rst![RECOR_15DIAS] = True
rst.Update
'Si no existe Codigo de Proyecto pasamos al siguiente registro
If IsNull(MAIL) Then GoTo Siguiente
'Si el codigo de proyecto es igual al del registro anterior pasamos al siguiente
Else: GoTo Siguiente
End If
Siguiente:
'Guardamos el valor del Codigo de Proyecto para compararlo despues
CodProy_0 = rst.Fields("CODIGO_PROYECTO").Value
'Nos movemos al registro siguiente
rst.MoveNext
Loop
SALIDA:
'Cerramos conexiones y liberamos memoria
rst.Close
dbs.Close
Set rst = Nothing
Set dbs = Nothing
Exit Sub
Sol_err:
Resume SALIDA:
End Sub
Valora esta pregunta


0