Newsgroup: it.comp.appl.access
Titolo: Priorità esecuzione codice (lunghetto)

Salve a tutti, è un paio di giorni che cerco di risolvere un problema senza
successo.
Ho creato del codice per la creazione di un calendario per diverse aule e
diversi corsi.
Private Sub Comando0_Click()
    Dim cnn1 As ADODB.Connection
    Dim rstDettagli As ADODB.Recordset
    Dim rstCalendario As ADODB.Recordset
    Dim rstCalendAula As ADODB.Recordset
    Dim rstInizio As ADODB.Recordset
    Dim intAula As Integer
    Dim intCorso As Integer
    Dim intGiorni As Integer
    Dim dataLez As Date
    Dim intEd As Integer
    Dim giornoSett As Integer
    Dim DataInizio As Date
    Dim strCnn As String
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE CalendAula.* FROM CalendAula;"
    DoCmd.SetWarnings True
    ' Apre una connessione.
    Set cnn1 = New ADODB.Connection
    strCnn = CurrentProject.Connection
    cnn1.Open strCnn
    ' Apre la tabella Calendario.
    Set rstDettagli = New ADODB.Recordset
    rstDettagli.CursorType = adOpenKeyset
    rstDettagli.LockType = adLockOptimistic
    rstDettagli.Open "DettagliAulaCorso", cnn1, , , adCmdTable
    Set rstCalendAula = New ADODB.Recordset
    rstCalendAula.CursorType = adOpenKeyset
    rstCalendAula.LockType = adLockOptimistic
    rstCalendAula.Open "CalendAula", cnn1, , , adCmdTable
    Set rstCalendario = New ADODB.Recordset
    rstCalendario.CursorType = adOpenKeyset
    rstCalendario.LockType = adLockOptimistic
    rstCalendario.Open "CalendarioAule", cnn1, , , adCmdTable
    Set rstInizio = New ADODB.Recordset
    rstInizio.CursorType = adOpenKeyset
    rstInizio.LockType = adLockOptimistic
    rstInizio.Open "InizioCorsi", cnn1, , , adCmdTable
    DoCmd.Hourglass True
    rstDettagli.MoveFirst
    Do Until rstDettagli.EOF
        intAula = rstDettagli.Fields("IdAula")
        intCorso = rstDettagli.Fields("IdCorso")
        intGiorni = rstDettagli.Fields("GiorniPerEd")
        intEd = rstDettagli.Fields("NumEd")
        rstInizio.Requery
        dataLez = rstInizio.Fields("DataInizio")
            For x = 1 To intEd
                 For i = 1 To intGiorni
                    rstCalendAula.AddNew
                    rstCalendAula!IdAula = intAula
                    rstCalendAula!IdCorso = intCorso
                    rstCalendAula!Edizione = x
                    rstCalendAula!dataLezione = dataLez
                    rstCalendAula.Update
                    rstCalendario.AddNew
                    rstCalendario!IdAula = intAula
                    rstCalendario!IdCorso = intCorso
                    rstCalendario!Edizione = x
                    rstCalendario!dataLezione = dataLez
                    rstCalendario.Update
        Next i
            rstInizio.Requery
            dataLez = rstInizio.Fields("DataInizio")
        Next x
        rstDettagli.MoveNext
        If intAula <> rstDettagli.Fields("idAula") Then
            'DoCmd.SetWarnings False
            rstCalendAula.Update
            rstCalendAula.Close
            DoCmd.SetWarnings False
            DoCmd.RunSQL "DELETE CalendAula.* FROM CalendAula;"
            DoCmd.SetWarnings False
            rstCalendAula.Open "CalendAula", cnn1, , , adCmdTable
            pausa (2)
            DoCmd.SetWarnings True
        End If
      Loop
    rstDettagli.Close
    rstCalendario.Close
    rstInizio.Close
    cnn1.Close
    DoCmd.Hourglass False
'errTrap:
    'MsgBox Err.Number & Err.Description
    'DoCmd.Hourglass False
End Sub
Il problema è questo: il codice va avanti correttamente per un tot Num di
aule poi si blocca, come se non avesse fatto in tempo ad eseguire la query
di eliminazione dei dati dalla tabella CalendAula e quindi non aveese più
giorni disponibili. Se poi disattivo gli avvisi di esecuzione query, ancora
peggio! CalendAula mi serve ad individuare il primo giorno utile per
l'inizio di un corso, tra quelli inseriti in un'apposita Tabella
calendarioLezioni
Avete qualche chiarimento per me?
Grazie mille
Nina


Ciao Nina
Stai usando due motori diversi (ADO e DAO)  e non è detto che l'uno veda le
variazioni dell'altro in tempo reale.
------------------------------
Utilizza ADO anche per le query di eliminazione.
cnn1.Execute "DELETE CalendAula.* FROM CalendAula;"
------------------------------
poi... al posto di
---------------------------------
    ' Apre una connessione.
    Set cnn1 = New ADODB.Connection
    strCnn = CurrentProject.Connection
    cnn1.Open strCnn
---------------------------------
metti
-----------------------------
   'Apre una connessione.
    Set cnn1 = CurrentProject.Connection
----------------------------
a fine sub non chiudere cnn1, è riferita alla connessione del  Db, settala
solo a nothing.
------------------------
    Set cnn1 = Nothing
------------------------
Ciao Giorgio.

 Ciao Giorgio.
Grazie mille, ci provo
Nina


Funziona!!!! Grazie ancora, sei stato gentilissimo!!!
Ciao Nina