Newsgroup: it.comp.appl.access
Titolo: db.close strano

Buongiorno e buone feste a tutti,
Ho un porzione di codice all'interno di una Private Sub che si comporta 
in modo irregolare con casualità random e mi da errore 91 quando arriva 
sulla riga db.close.
L'esecuzione ,anche in caso di errore,è regolare a parte il msgbox di 
avviso errore.Posso anche gestire l'errore, ma vorrei capire cosa 
sbaglio nel codice.
passo il codice
 
'+++++++ CONTROLLO LA GIACENZA +++++++++
strSql = "SELECT Giacenza FROM Pietanze " _
& "WHERE  IdPietanza=" & (IdPiet)
Set Db = CurrentDb
Set RsGiace1 = Db.OpenRecordset((strSql), dbOpenDynaset)
If RsGiace1.RecordCount = 1 Then
    Giacenza1 = RsGiace1!Giacenza
'Controllo la giacenza
MsgBox (Giacenza1)
        If Giacenza1 < 9999 Then
            With RsGiace1
'controllo la giacenza  se sottoscorta
            Select Case Giacenza1
                Case Is > (ParScortaAvv1)
                    Controls("Lbl" & (Num)).BackColor = 16777215 
'bianco
                Case (ParScortaAvvFine) To (ParScortaAvv1)
                    'colore pulsante giallo
                    Controls("Lbl" & (Num)).BackColor = 65535 'giallo
                Case 1 To (ParScortaAvvFine)
                    'colore pulsante rosso
                    Controls("Lbl" & (Num)).BackColor = 255 'rosso
                Case Is < 1
                    Controls("Lbl" & (Num)).BackColor = 255
                    If MsgBox("La giacenza è a  --> " & Giacenza1 & "" 
_
                    & " Confermi inserimento ? ", vbYesNo, "Attenzione 
") = vbNo Then
                        Exit Sub
                    End If
                End Select
' aggiorno giacenza
    .Edit
        RsGiace1!Giacenza = RsGiace1!Giacenza - 1
        .Update
        Giacenza1 = RsGiace1!Giacenza
    .Close
End With
'-------------------------------------------------------------------------------------------------
'se attivo db.close va spesso in errore 91
'Db.Close
'------------------------------------------------------------------------------------------------
Set RsGiace1 = Nothing
 
'Exit Sub
    Else
        MsgBox "Nessuna Giacenza impostata"
        Exit Sub
       End If
End If
 
Qualcuno mi può aiutare per piacere ?
Grazie per il vostro buon cuore e per la disponibità
Maurizio

MaurizioEmme brought next idea :

Io proprio non so a che serva chiudere un db... non
ne ho mai chiuso uno! Quando esci da Access si chiude tutto.
Comunque normalmente quel che si apre con Set (tipo: Set db=CurrentDB)
si chiude con Set (quindi Set db = Nothing).
 
Bruno

 MaurizioEmme brought next idea :> Buongiorno e buone feste a tutti,> Ho un porzione di codice all'interno di una Private Sub che si comporta in > modo irregolare con casualità random e mi da errore 91 quando arriva sulla > riga db.close.> L'esecuzione ,anche in caso di errore,è regolare a parte il msgbox di avviso > errore.Posso anche gestire l'errore, ma vorrei capire cosa sbaglio nel > codice.> passo il codice>> '+++++++ CONTROLLO LA GIACENZA +++++++++> strSql = "SELECT Giacenza FROM Pietanze " _> & "WHERE  IdPietanza=" & (IdPiet)> Set Db = CurrentDb> Set RsGiace1 = Db.OpenRecordset((strSql), dbOpenDynaset)> If RsGiace1.RecordCount = 1 Then>     Giacenza1 = RsGiace1!Giacenza> 'Controllo la giacenza> MsgBox (Giacenza1)>         If Giacenza1 < 9999 Then>             With RsGiace1> 'controllo la giacenza  se sottoscorta>             Select Case Giacenza1>                 Case Is > (ParScortaAvv1)>                     Controls("Lbl" & (Num)).BackColor = 16777215 'bianco>                 Case (ParScortaAvvFine) To (ParScortaAvv1)>                     'colore pulsante giallo>                     Controls("Lbl" & (Num)).BackColor = 65535 'giallo>                 Case 1 To (ParScortaAvvFine)>                     'colore pulsante rosso>                     Controls("Lbl" & (Num)).BackColor = 255 'rosso>                 Case Is < 1>                     Controls("Lbl" & (Num)).BackColor = 255>                     If MsgBox("La giacenza è a  --> " & Giacenza1 & "" _>                     & " Confermi inserimento ? ", vbYesNo, "Attenzione ") = > vbNo Then>                         Exit Sub>                     End If>                 End Select> ' aggiorno giacenza>     .Edit>         RsGiace1!Giacenza = RsGiace1!Giacenza - 1>         .Update>         Giacenza1 = RsGiace1!Giacenza>     .Close> End With> '-------------------------------------------------------------------------------------------------> 'se attivo db.close va spesso in errore 91> 'Db.Close> '------------------------------------------------------------------------------------------------> Set RsGiace1 = Nothing>> 'Exit Sub>     Else>         MsgBox "Nessuna Giacenza impostata">         Exit Sub>        End If> End If>> Qualcuno mi può aiutare per piacere ?> Grazie per il vostro buon cuore e per la disponibità> MaurizioIo proprio non so a che serva chiudere un db... nonne ho mai chiuso uno! Quando esci da Access si chiude tutto.Comunque normalmente quel che si apre con Set (tipo: Set db=CurrentDB)si chiude con Set (quindi Set db = Nothing).Bruno
 
Il SET non apre nulla e non chiude nulla ma assegna o libera un
 oggetto... che si apre con il metodo preposto...
Esempio:
Set db=CurrentDb
Set rs=db.openrecordset(..)
 
L'oggetto db è già aperto, mentre rs lo apriamo... e lo assegnamo.
 
L'oggetto rs andrebbe chiuso prima di distruggere la variabile
 oggetto rs e liberare memoria... 
rs.close
Set rs=Nothing
 
La variabile db basta liberarla... 
Set db=Nothing
 
Currentdb non ha alcun senso venga chiuso... n'est pas...
 
Sul serve non serve... 
 
-- 
@Alex
 
 
----Android NewsGroup Reader----
https://piaohong.s3-us-west-2.amazonaws.com/usenet/index.html
 

Bruno Campanini scriveva il 26/12/2020 :

 Ti confermo che con(Set db = Nothing) funziona tutto.
Quindi la procedura corretta è
 Set db=CurrentDB ?
Set db = Nothing ?
perchè guardando in giro alcuni usano DB.Close  altri  Set db = 
Nothing.
Ho sempre usato db.close e ,a parte questo caso,tutto è sempre filato 
liscio.
Comunque ragionandoci sopra il sistema giusto è quello da te scritto
Grazie
Buona serata
Maurizio

Il 26/12/2020, Alex ha detto :

Spiegazione chiara ora ho capito a cosa serve
 
Grazie
Buona serata
Maurizio