Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

Elimina record correlati senza "Elimina record correlati a catena"

  1. #1
    SCvanni non è in linea Scribacchino
    Buonasera a tutti,
    come si evince dal titolo ho una serie di tab con record correlati ma non voglio utilizzare,per motivi che non sto a precisare, la funzione "Applica Integrità referenziale" > "Elimina record correlati a catena" quindi intendo procedere in questo modo:
    1 creare un recordset dei record da eliminare.
    2 eliminare i record dalle tab "Figlie" che contengono le Fk selezionate nel recordset
    3 eliminare i record dalla Tab "Padre"

    Ho provato a scrivere questo codice che dovrebbe servire per eliminare i record dalla prima "Figlia"

    Private Sub CmdElimina_Click()
    Dim strSQL As String
    Dim rs As DAO.Recordset
       strSQL = "SELECT CtArchGeneral.IdCalc, CtArchGeneral.Sel FROM CtArchGeneral WHERE CtArchGeneral.Sel=True"
    
     Set rs = DBEngine(0)(0).OpenRecordset(strSQL)
    
      If rs.EOF Then GoTo Exit_Here
        rs.MoveFirst
       Do Until rs.EOF
      ' DoCmd.SetWarnings False
      
       DoCmd.RunSQL "DELETE CtArch1Somma.idCalc FROM CtArch1Somma WHERE CtArch1Somma.idCalc = rs!fields(idcalc)"
       rs.MoveNext
        Loop
    Exit_Here:
      On Error Resume Next
      rs.Close
      Set rs = Nothing
    GestErr:
    If Err.Number <> 0 Then
    MsgBox "Errore N° " & Err.Number & vbNewLine & Err.Description
    Resume Next
    End If
    
    GoTo fine:
    fine:
    
    End Sub
    
    Il messaggio che ricevo è questo:

    "Funzione rs!Fields non definita nell'espressione"

    Ringrazio in anticipo quanti vorranno essermi d'aiuto
    ℹ️ Leggi di più su SCvanni ...

  2. #2
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Quote Originariamente inviato da SCvanni Visualizza il messaggio

    .... 
    DoCmd.RunSQL "DELETE CtArch1Somma.idCalc FROM CtArch1Somma WHERE CtArch1Somma.idCalc = rs!fields(idcalc)"
    
    Tu Includi rs!field ... direttamente nel comando e questo non può essere risolto dal motore di access.

    Prova così :
    DoCmd.RunSQL "DELETE CtArch1Somma.idCalc FROM CtArch1Somma WHERE CtArch1Somma.idCalc = " & rs!fields(idcalc)
    
    Ovviamente se idcalc fosse di tipo stringa dovresti racchiuderlo dentro gli apici (o doppi apici) ....

  3. #3
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Private Sub CmdElimina_Click()
    Dim strSQL As String
    Dim rs As DAO.Recordset
    
    On error goto GestErr
    
    strSQL = "SELECT CtArchGeneral.IdCalc, CtArchGeneral.Sel FROM CtArchGeneral WHERE CtArchGeneral.Sel=True"
    
    Set rs = DBEngine(0)(0).OpenRecordset(strSQL)
    
    Do while not rs.EOF
      ' DoCmd.SetWarnings False
      
       DoCmd.RunSQL "DELETE CtArch1Somma.idCalc FROM CtArch1Somma WHERE CtArch1Somma.idCalc = " & rs!fields(idcalc)
    
       rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    
    Exit_Here:
    Exit Sub
    
    GestErr:
    If Err.Number <> 0 Then
        MsgBox "Errore N° " & Err.Number & vbNewLine & Err.Description
        Exit Sub
    End If
    End Sub
    
    Questa è una scrittura un pò più 'pulita' del tuo codice .... (scritta direttamente senza testare - potrebbero esserci errori di sintassi)

  4. #4
    SCvanni non è in linea Scribacchino
    Grazie Max
    anche per la celerità, sia effettuando le correzioni da te suggerite quanto scrivendo la versione più "pulita"
    non ricevo più il messaggio precedente ma ricevo questo messaggio

    "Elemento non trovato in questa raccolta"

    provo a verificare i record e ti faccio sapere, intanto riGrazie.
    ℹ️ Leggi di più su SCvanni ...

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Suggerirei una variante...

     
    DBEngine(0)(0).Execute "DELETE CtArch1Somma.idCalc FROM CtArch1Somma WHERE CtArch1Somma.idCalc IN (SELECT CtArchGeneral.IdCalc FROM CtArchGeneral WHERE CtArchGeneral.Sel=True)"
    
    Mi pare sia più comoda...

    L'uso del metodo Execute evita di dover forzare i WARNINGS e sicuramente semplifica l'esecuzione.
    ℹ️ Leggi di più su @Alex ...

  6. #6
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    rs!fields("idcalc")
    oppure
    rs("idcalc")
    

  7. #7
    SCvanni non è in linea Scribacchino
    Quote Originariamente inviato da Max.Riservo Visualizza il messaggio
    rs!fields("idcalc")
    oppure
    rs("idcalc")
    
    Mi avete subissato di suggerimenti

    Cosi funziona :
    rs("idcalc")

    Grazie Max
    ℹ️ Leggi di più su SCvanni ...

  8. #8
    SCvanni non è in linea Scribacchino
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Suggerirei una variante...

     
    DBEngine(0)(0).Execute "DELETE CtArch1Somma.idCalc FROM CtArch1Somma WHERE CtArch1Somma.idCalc IN (SELECT CtArchGeneral.IdCalc FROM CtArchGeneral WHERE CtArchGeneral.Sel=True)"
    
    Mi pare sia più comoda...

    L'uso del metodo Execute evita di dover forzare i WARNINGS e sicuramente semplifica l'esecuzione.
    Provo anche la variante ma nel suggerimento di max come nel mio il setwarning è commentato.
    ℹ️ Leggi di più su SCvanni ...

  9. #9
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Quote Originariamente inviato da SCvanni Visualizza il messaggio
    Mi avete subissato di suggerimenti

    Cosi funziona :
    rs("idcalc")

    Grazie Max
    Ti sei perso in un bicchiere pieno di apici e doppi apici

    Molti anni fa ebbi l'ardire di fare una battuta ad una 'collega' semplicemente cambiando la pronuncia della parola apice (a picie *) ... chi è del Piemonte può ben immaginare gli insulti che mi sono preso

    * - Che poi lo slang piemontese è un poco stravagante.
    Dicesi 'Picio' un maschio un pò ingenuo ..
    Dicesi 'Picia' una fanciulla di facili costumi (e sono stato gentile nella definizione) ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 11
    Ultimo Post: 29-12-2014, 11:33
  2. Aggiunta o modifica di record correlati
    Da bertelli.davide nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 30-10-2014, 22:15
  3. Problema eliminazione record correlati...
    Da great_mirko nel forum Microsoft Access
    Risposte: 13
    Ultimo Post: 27-04-2012, 02:04
  4. [ACCESS 2003] Sottomaschere e record correlati.
    Da frak nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 25-03-2010, 00:26
  5. Risposte: 3
    Ultimo Post: 02-03-2008, 14:48