Newsgroup: it.comp.appl.access
Titolo: Aggiornamento del valore di un recordset creato con VBA: dove sbaglio?

Il problema è questo:
Devo inviare automaticamente una email ad un amico ogni settimana.
Per
controllare se è già stata inviata popolo l'unico record di una
apposita tabella con la data di invio, corrispondente sempore ad un
sabato. Ogni qualvolta apro access la data viene controllata, se è la
medesima non accade nulla se è cambiata viene aggiornata e l'email
viene spedita. Non so se il metodo sia l'unico, uno dei più efficaci,
o il peggiore, fatto sta che con le conoscenze che ho a disposizione,
questo è ciò che son riuscito a ricavare.
Premetto che il programma gira su un unico PC, il mio.
Il codice fila liscio fino ad un certo punto, cioè il seguente:
Set RS = New ADODB.Recordset
RS.ActiveConnection = CurrentProject.Connection
RS.Open "select tblParametri_e_configurazioni.IDParametro,
tblParametri_e_configurazioni.ValoreParametro FROM
tblParametri_e_configurazioni WHERE
((tblParametri_e_configurazioni.IDParametro)=1)"
Select Case DataInvioEmail     'DataInvioEmail = Date + 6 -
Weekday(Date, vbMondey)
    Case RS.Fields("ValoreParametro")
        Exit Sub
    Case RS.Fields("ValoreParametro") + 7
Dopodichè ho un intoppo alla seguente riga
        RS.Update "ValoreParametro", DataInvioEmail
che segnala l'errore 3251 - "Il set di record corrente non supporta
l'aggiornamento. Potrebbe trattarsi di una limitazione del provider o
del tipo di blocco selezionato."
Il codice dovrebbe poi
continuare con:
 GoTo Invio_Email
    Case Is > RS.Fields("ValoreParametro") + 7
        Dim Title As String
        Dim Msg As String
        Title = "DVD della settimana - Invio email"
        Msg = "A causa della mancata apertura del Database per un
periodo superiore a 7 giorni, " _
        & "è venuto meno l'invio della email per una o più
settimane."
& ACapo & "Si consiglia di" _
        & " verificare e provvedere manualmente." & ACapo & ACapo &
"Inviare ugualmente l'email p" _
        & "er questa settimana?"
        Response = MsgBox(Msg, vbYesNo, Title)
        If Response = vbYes Then
            GoTo Invio_Email
        Else
            Exit Sub
        End If
End Select
Grazie a chiunque mi dia un aiuto.
leev
(AC00/XP)

 ha scritto nel messaggio news:1176560492....@b75g2000hsg.googlegroups.com...
Il problema è questo:
Devo inviare automaticamente una email ad un amico ogni settimana.
Per
controllare se è già stata inviata popolo l'unico record di una
apposita tabella con la data di invio, corrispondente sempore ad un
sabato. Ogni qualvolta apro access la data viene controllata, se è la
medesima non accade nulla se è cambiata viene aggiornata e l'email
viene spedita. Non so se il metodo sia l'unico, uno dei più efficaci,
o il peggiore, fatto sta che con le conoscenze che ho a disposizione,
questo è ciò che son riuscito a ricavare.
Premetto che il programma gira su un unico PC, il mio.
Il codice fila liscio fino ad un certo punto, cioè il seguente:
Set RS = New ADODB.Recordset
RS.ActiveConnection = CurrentProject.Connection
RS.Open "select tblParametri_e_configurazioni.IDParametro,
tblParametri_e_configurazioni.ValoreParametro FROM
tblParametri_e_configurazioni WHERE
((tblParametri_e_configurazioni.IDParametro)=1)"
[risposta]
Prova così:
Dim rst As New ADODB.Recordset
rst.Open "tblParametri_e_configurazioni", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rst.Find "IDParametro=1", , adSearchForward
If Not rst.EOF Then
    rst!ValoreParametro = DataInvioEmail
Else
    MsgBox "Non trovato"
End If
rst.Update
rst.Close
Set rst = Nothing
---omissis--
Grazie a chiunque mi dia un aiuto.
leev
(AC00/XP)
[risposta]
(Considerazione) Ma se devi aggiornare uno o più campi perché non utilizzare una query di aggiornamento?
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Leev

Per mancanza di tempo non ho provato il codice ma sono andato
direttamente all'utilizzo della query:
tutto perfetto tranne un piccolo problemino:
Come per tutte le query di aggiornamento viene mostrata una finestra
di avviso sulla modifica dei dati che resta in attesa di conferma. Io
vorrei evitare di visualizzarla. E' possibile?
Si lo è! prima di inviare questa richiesta ho trovato la risposta sul
NG.
Grazie di tutto Sergio!
Ciao

 ha scritto nel messaggio 
news:1178210548....@l77g2000hsb.googlegroups.com...



[risposta]
Occhio che il SetWarnings una volta disattivato non visualizza più le 
richieste di conferma anche nella cancellazione degli oggetti nella finestra 
del database (form/report/etc. etc.).
Quindi ti consiglio di gestire gli errori con on error goto per 
rispristinare il SetWarnings:
es.
private sub ___
on error goto errori
docmd.setwarnings false
...tuo codice...
docmd.setwarnings true
exit sub
errori:
    docmd.setwarnings true
    msgbox err.number & " " & application.accesserror(err.number)
end sub
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Io ho fatto in modo che il Set warnings venisse ripristinato il prima
possibile all'interno di ogni (SELECT) CASE. Se non ho capito male mi
stai dicendo che per evitare comunque un possibile errore in queste
poche righe, meglio prevedere una gestione degli errori subito prima
del settaggio OFF che ripristini in caso avvenga qualcosa, giusto? Ho
capito bene?
Grazie del consiglio.
Buona domenica (beh, oh....oggi è domenica....!).
:-)
leev

[continua]
(ops, ho dimenticato il codice) Eccolo:
DoCmd.SetWarnings False 'Disattiva i messaggi di sistema (richiesta di
conferma per query di aggiornamento)
Select Case DataInvioEmail
    Case RS.Fields("ValoreParametro")
        RS.Close
        Set RS = Nothing
        DoCmd.SetWarnings True
        Exit Sub
    Case RS.Fields("ValoreParametro") + 7
        DoCmd.RunSQL StringaSQL
        RS.Close
        Set RS = Nothing
        DoCmd.SetWarnings True
        GoTo Invio_Email
    Case Is > RS.Fields("ValoreParametro") + 7
        Dim Title As String
        Dim Msg As String
        Title = "DVD della settimana - Invio email"
        Msg = "A causa della mancata apertura del Database per un
periodo superiore a 7 giorni, " _
        & "è venuto meno l'invio della email per una o più settimane."
& ACapo & "Si consiglia di" _
        & " verificare e provvedere manualmente." & ACapo & ACapo &
"Inviare ugualmente l'email p" _
        & "er questa settimana aggiornando la data?"
        Response = MsgBox(Msg, vbYesNo, Title)
        If Response = vbYes Then
            DoCmd.RunSQL StringaSQL
            RS.Close
            Set RS = Nothing
            DoCmd.SetWarnings True
            GoTo Invio_Email
        Else
            RS.Close
            Set RS = Nothing
            DoCmd.SetWarnings True
            Exit Sub
        End If
End Select
Critica pure, se è il caso.
Grazie
Ciao
leev

 ha scritto nel messaggio 
news:1178457261.7...@e65g2000hsc.googlegroups.com...
[continua]
(ops, ho dimenticato il codice) Eccolo:
[risposta]
On error goto errori


[risposta]
...tuo codice...
exit sub (o function, vedi tu)
errori:
    Set RS = Nothing
    DoCmd.SetWarnings True
    msgbox err.number " " & application.accesserror(err.number)
Critica pure, se è il caso.
[risposta]
Mah! Posso suggerirti qualche modifica, poi sta a te scegliere...
Grazie
Ciao
leev
[risposta]
Ciao.
-- 
Sergio MAZZA