Access - No puedo actualizar datos de una consulta con recordset.edit

   
Vista:

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 = "manolito@yahoo.es"
'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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito

No puedo actualizar datos de una consulta con recordset.edit

Publicado por Neckkito (1104 intervenciones) el 10/09/2012 10:08:51
Hola!
Estaba esperando a ver si alguien te contestaba con alguna solución, pero veo que no ha habido suerte.
Yo no puedo darte una respuesta a tu pregunta porque no lo sé. Sin embargo, sí puedo comentarte algo que quizás te ayude (espero).
En primer lugar decirte que el código parece correcto (veo que has "mezclado estilos", pero eso no invalida el código). A simple vista no soy capaz de ver nada incorrecto.
En segundo lugar, hay consultas que, por su estructura, sólo permiten la visualización de datos, pero no su modificación. En tu caso parece que el error se debe a este segundo motivo.
Una forma de comprobar lo anterior es abrir la consulta directamente (doble click sobre el objeto-consulta) e intentar marcar el check con un click del ratón. Si no te deja hacerlo manualmente es que tu consulta pertenece a esta categoría.
¿Por qué es así? Por varios factores, pero básicamente por temas de relaciones entre tablas.
Y finalmente, si ese fuera el caso, tendrías que replantearte la sistemática del proceso que estás realizando e intentar conseguir lo que quieres de otra manera.
Lamento no poder ser más explícito, o darte una solución "directa", pero, en este caso, el problema parece que es un problema muy puntual y que depende de la estructura de tu BD.
A ver si con lo que te acabo de comentar se "enciende la bombilla".
Un saludo,
Neckkito
... http://neckkito.eu5.org ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar