Query di eliminazione con parametri e campi vuoti.

Anonimo
2017-02-08T13:24:10+00:00

Buongiorno a tutti, ho una tabella (tIban) con 6 campi testo chiamati: Matricola ;Grado; Cognome; Nome; Ruolo e IBAN. 

Ho creato il codice sottoriportato che mi dovrebbe contare gli IBAN vuoti ed eliminarli, ma la cosa strana è che seppur presenti i dati vuoti nel campo IBAN il codice mi dice che non ci sono IBAN da eliminare.

Avrei bisogno come sempre del vostro preziosissimo aiuto per poter capire dov'è che sbaglio.

Private Sub EliminaIbanVuoti_Click()

Dim dbs As Database, rst As Recordset

Dim tot As Long

tot = DCount("*", "tIban", "IsNull(IBAN)")

    If tot = 0 Then

    MsgBox " Non ci sono IBAN mancanti!"

    Exit Sub

    End If

If MsgBox("Ci sono nr. " & tot & " Dipendenti senza Iban" & Chr(13) _

   & " Li vuoi eliminare oppure no?", vbInformation + vbDefaultButton2 + vbYesNo) = vbYes Then

      If MsgBox(" Sei Proprio sicuro di voler eliminare gli IBAN Mancanti?", vbCritical + vbDefaultButton2 + vbYesNo) = vbNo Then

         Exit Sub

      Else    

    Set dbs = CurrentDb

DoCmd.SetWarnings False

DoCmd.RunSQL "DELETE * FROM tIban WHERE (IBAN)Is Null"

DoCmd.SetWarnings True

      End If

End If

Me.Requery

End Sub

Ciao Nicola.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-02-08T15:53:25+00:00

ciao Nicola,

ricordi quanto discusso circa le transazioni....?

Nelle action queries puoi anche sfruttare la proprietà recordsAffected senza contare le righe coinvolte nella stessa prima...

prova su una copia back up...! segue :

Option Compare Database

Option Explicit

Sub test()

On Error GoTo errHandler

Dim strSql As String

Dim lngRec As Long

Dim boolT  As Boolean

strSql = "delete * from tIban where iban is null"

DBEngine.BeginTrans

    With DBEngine(0)(0)

         .Execute strSql, &H80

         lngRec = .RecordsAffected

    End With

    If lngRec > 0 Then

        If VBA.MsgBox("vuoi eliminare " & lngRec & " dalla tabella tIban ?", vbCritical + vbYesNo, "avviso") = vbYes Then

          If VBA.MsgBox("ancora, sei propri sicuro?", vbInformation + vbYesNo, "Attenzione") = vbYes Then

                DBEngine.CommitTrans

                boolT = True

          End If

        End If

    End If

exitErrHandler:

     If Not boolT Then

        DBEngine.Rollback

     End If

     Exit Sub

errHandler:

     With Err

        MsgBox "ERR#" & .Number _

             & vbNewLine & .Description _

             , vbOKOnly Or vbCritical

      End With

      Resume exitErrHandler

End Sub

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-02-10T08:14:34+00:00

    Ciao Sandro, buongiorno, quanto a questo:

    ciao Nicola,

    ricordi quanto discusso circa le transazioni....?

    certo che ricordo quanto discusso sulle transazioni, ho conservato il tuo DB di prova messo a disposizione con il quale mi hai spiegato minuziosamente l'utilizzo e con i 4 esempi analizzati ho capito benissimo cose di cui prima non conoscevo nemmeno l'esistenza.

    La stessa cosa mi è capitata oggi con la tua indicazione che ho dovuto ricercare in internet e studiare, ma la cosa che mi ha stupito di più è che questo termine (.RecordsAffected) non l'ho trovato su di un libro di Access 2010 (analizzando tutte le voci dell'indice analitico del libro) della Hoepli che ho comprato e che utilizzo per i miei progetti e che mai avrei potuto immaginare di poterlo  utilizzarlo nel mio caso.

    Comunque mi complimento per la tua professionalità e grazie ancora per i tuoi preziosi insegnamenti.

    Il tuo codice è perfetto, alla prossima richiesta di aiuto.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-02-08T14:16:36+00:00

    Ciao Mimmo, grazie come sempre per la tua gentilezza e celerità nel rispondermi.

    Ho scoperto e risolto il problema, ora funziona benissimo tutto.

    Avevo scritto male il nome della tabella sulla quale era impostato tutto il codice.

    Comunque ho notato che sia la tua che la mia istruzione ( che riporto di seguito) funzionano bene e mostrano lo stesso risultato.

    tot = DCount("*", "tIban", "IBAN Is Null")

    tot = DCount("*", "tIban", "IsNull(IBAN)")

    Se dovesse servire ad altri utenti, comunico che il codice completo e postato precedentemente funziona benissimo, cioè conta ed elimina gli IBAN vuoti.

    Grazie per tutta l'assistenza che mi date.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-02-08T13:48:42+00:00

    Ciao Nicola,

    prova con:

    tot = DCount("*", "tIban", "IBAN Is Null")

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento