Newsgroup: it.comp.appl.access
Titolo: Close o Nothing-Transazioni

Ho due dubbi:
1 - Close e Nothing sono la stessa cosa o no?
2 - Si puo' gestire la transazione con la gestione errori?
Queste domande sottintendono i dubbi che ho riguardo a questo codice che
vorrei, al di la' di quello che fa e che funziona gia', ottimizzato con
l'inserimento delle transazioni e di un uso corretto di Close e Nothing.
Se qualcuno me lo puo' eventualmente correggere vi sarei grato.
- Ho usato i Close giusti e nella sequenza giusta o e' meglio e dove
Nothing? (ho trovato ad es. sia Set dbs=Nothing che dbs.Close)
- Dalla guida c'era l'uso di un flag per gestire la transazione: e' giusto
cosi'?
- devo usare anche Set wsp=Nothing per chiudere correttamente la
transazione?
Sub CalcolaRimanenze()
On Error GoTo Err_CalcolaRimanenze
    Dim dbsMonopolio As Database
    Dim rstMovimenti As Recordset
    Dim rstCarichi As Recordset, rstScarichi As Recordset
    Dim strSqlScarichi As String, strSqlCarichi As String
    Dim intNumRec As Integer
    Dim fld1Recordset As Field, fld2Recordset As Field
    Dim wspTrans As Workspace   'prepara la transazione
    Dim flTrans As Boolean
    Application.Echo False, "ATTENDERE...PROCEDURA DI ELABORAZIONE DELLE
RIMANENZE IN ESECUZIONE!"
    DoCmd.Hourglass True
    DoCmd.SetWarnings False
    flTrans = False
    Set wspTrans = DBEngine.Workspaces(0)
    wspTrans.BeginTrans         'inizia la transazione
    flTrans = True
    Set dbsMonopolio = CurrentDb
    Set rstMovimenti = CurrentDb.OpenRecordset("QUERY3")
    If rstMovimenti.RecordCount = 0 Then
        MsgBox "ATTENZIONE!" & Chr(13) & Chr(10) _
        & Chr(13) & Chr(10) & "Non ci sono nuovi Documenti " _
        & "di Carico o di Scarico da elaborare." & Chr(13) & Chr(10) _
        & Chr(13) & Chr(10) & "Fine dell 'elaborazione delle Rimanenze." &
Chr(13) & Chr(10) _
        & Chr(13) & Chr(10) & "Premere OK.", vbOKOnly, "ELABORAZIONE
RIMANENZE"
    Else
        DoCmd.OpenQuery "QUERY_ACCODA_RIMANENZE"
        strSqlScarichi = "SELECT FlagScaricoElaborato, " _
        & "DataElaborazioneScarico FROM TAB_SCARICO_MAGAZZINO " _
        & "WHERE (FlagScaricoElaborato)=No;"
        Set rstScarichi = CurrentDb.OpenRecordset(strSqlScarichi)
        If Not rstScarichi.BOF Then
            rstScarichi.MoveLast
            rstScarichi.MoveFirst
            For intNumRec = 1 To rstScarichi.RecordCount
                rstScarichi.Edit
                Set fld1Recordset =
rstScarichi.Fields("FlagScaricoElaborato")
                fld1Recordset.Value = True
                Set fld2Recordset =
rstScarichi.Fields("DataElaborazioneScarico")
                fld2Recordset.Value = Now()
                rstScarichi.Update
                If intNumRec = rstScarichi.RecordCount Then Exit For
                rstScarichi.MoveNext
            Next
        End If
        strSqlCarichi = "SELECT FlagCaricoElaborato, " _
        & "DataElaborazioneCarico FROM TAB_CARICO_MAGAZZINO " _
        & "WHERE (FlagCaricoElaborato)=No;"
        Set rstCarichi = CurrentDb.OpenRecordset(strSqlCarichi)
        If Not rstCarichi.BOF Then
            rstCarichi.MoveLast
            rstCarichi.MoveFirst
            For intNumRec = 1 To rstCarichi.RecordCount
                rstCarichi.Edit
                Set fld1Recordset = rstCarichi.Fields("FlagCaricoElaborato")
                fld1Recordset.Value = True
                Set fld2Recordset =
rstCarichi.Fields("DataElaborazioneCarico")
                fld2Recordset.Value = Now()
                rstCarichi.Update
                If intNumRec = rstCarichi.RecordCount Then Exit For
                rstCarichi.MoveNext
            Next
        End If
    rstScarichi.Close
    rstCarichi.Close
    End If
    rstMovimenti.Close
    dbsMonopolio.Close
Exit_CalcolaRimanenze:
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    Application.Echo True
    wspTrans.CommitTrans    '   termina la transazione
    Exit Sub
Err_CalcolaRimanenze:
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    Application.Echo True
    MsgBox Err.Description
    If flTrans Then
        wspTrans.Rollback    '   annulla la transazione
    End If
    Resume Exit_CalcolaRimanenze
End Sub
Grazie
bg

 1 - Close e Nothing sono la stessa cosa o no?
Dalla guida in linea leggo:
la parola chiave Nothing è utilizzata per annullare l'associazione tra una
variabile oggetto e qualsiasi oggetto. Per assegnare Nothing a una variabile
oggetto, utilizzare l'istruzione Set. Ad esempio:
Set MyObject = Nothing
Se non sbaglio con Close chiudi quello che hai aperto con Set ma rimane
valida l'associazione , invece con Nothing si annulla l'associazione.
giuseppe