Query di aggiornamento campo SI/NO

di il
7 risposte

Query di aggiornamento campo SI/NO

Buonasera, 

in una tabella ho alcuni campi, tra i vari ho un campo SI/NO denominato SELEZIONA.

Su questi campi spesso applico dei filtri e i record filtrati mi mostrano in maschere continue.

Ora attraverso l'evento AfterUpdate su una checkbox chkTutti (senza origine dati) eseguo la query:

Private Sub chkTutti_AfterUpdate()
'CASELLA CONTROLLO "TUTTI"
    CurrentDb.Execute "UPDATE tblRubricaPEC SET [Seleziona] = " & chkTutti & " WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null", dbFailOnError

End Sub

che va a selezionare TUTTI i record della tabella tenendo conto di alcune condizioni: campo [STATO] = ‘ATTIVA’ e campo  [NOMENCLATURA CASELLA] = non vuoto

La query funziona a dovere ma ora vorrei ottenere una selezione diversa. Anziché selezionare TUTTI i record che rispettano la condizione su descritta, vorrei che rimanessero inalterate tale condizioni ma la selezione deve essere solo dei record filtrati precedentemente. Quindi se ad esempio in tabella ho 1000 record e attraverso una textbox (chiaramente già codificata) filtro 200 record, al click sulla checkbox chkTutti si dovranno selezionare solo questi 200 record (ovviamente laddove siano rispettare le due condizioni già presenti nella query).

Pensavo che si potesse fare implementando la query che utilizzo già…magari con una ennesima condizione…del tipo:

Private Sub chkTutti_AfterUpdate()
'CASELLA CONTROLLO "TUTTI"
    CurrentDb.Execute "UPDATE tblRubricaPEC SET [Seleziona] = " & chkTutti & " WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null And Me.FilterOn = True", dbFailOnError

End Sub

Ringrazio colui che mi dia anche solo un piccolo suggerimento. Purtroppo io mi fermo a questo punto con le mie conoscente.

7 Risposte

  • Re: Query di aggiornamento campo SI/NO

    26/09/2023 - alexps81 ha scritto:


    ……[NOMENCLATURA CASELLA] Is Not Null And Me.FilterOn = True"

    Ciao, in questo modo ti dovrebbe restituire errore, la sintassi non è corretta.

    in Filter cosa hai ? 

    in sostanza quello che hai nel filtro dovrebbe contenere una colonna per la quale deve corrispondere al valore True. Se ho capito bene la colonna si dovrebbe chiamare SELEZIONA e pertanto dovresti fare una cosa del genere 

    ......[NOMENCLATURA CASELLA] Is Not Null And Seleziona = True"

    altrimenti una cosa di questo tipo :

    ......[NOMENCLATURA CASELLA] Is Not Null And Seleziona = " & booleanTuoValore & ";"

    però non capisco bene la tua esigenza , se puoi sinteticamente descrivere meglio allora sarà possibile capire e dare una soluzione appropriata.

  • Re: Query di aggiornamento campo SI/NO

    la selezione deve essere solo dei record filtrati precedentemente

    se ho capito bene l'errore è usare me.filterOn (ti dice solo se la Me (Maschera?) è filtrata o meno) al posto di Me.Filter (che contiene tutte le condizioni per le quali è filtrata e che vuoi mantenere)

    quindi proverei con

    Private Sub chkTutti_AfterUpdate()
    'CASELLA CONTROLLO "TUTTI"
        CurrentDb.Execute "UPDATE tblRubricaPEC SET [Seleziona] = " & chkTutti & " WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null And Me.Filter", dbFailOnError
    
    End Sub

    Devi solo verificare che non venga precedentemente filtrato anche il campo [Stato] altrimenti potrebbe restituire errore perchè nella clausola WHERE comparirebbe due volte il campo [Stato].

    Quello che farei io è costruirmi la clausola WHERE con tutti i criteri ed i controlli che servono,  assegnarla ad una variabile e  poi passare la variabile al predicato SQL 

  • Re: Query di aggiornamento campo SI/NO

    27/09/2023 - VBAndre ha scritto:


    la selezione deve essere solo dei record filtrati precedentemente

    se ho capito bene l'errore è usare me.filterOn (ti dice solo se la Me (Maschera?) è filtrata o meno) al posto di Me.Filter (che contiene tutte le condizioni per le quali è filtrata e che vuoi mantenere)

    quindi proverei con

    Private Sub chkTutti_AfterUpdate()
    'CASELLA CONTROLLO "TUTTI"
        CurrentDb.Execute "UPDATE tblRubricaPEC SET [Seleziona] = " & chkTutti & " WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null And Me.Filter", dbFailOnError
    
    End Sub

    Devi solo verificare che non venga precedentemente filtrato anche il campo [Stato] altrimenti potrebbe restituire errore perchè nella clausola WHERE comparirebbe due volte il campo [Stato].

    Quello che farei io è costruirmi la clausola WHERE con tutti i criteri ed i controlli che servono,  assegnarla ad una variabile e  poi passare la variabile al predicato SQL 

    Non può andare di certo quel predicato SQL…!!!

    JET non riconosce il [Me] che viene riconosciuto SOLO all'interno del codice dell'Oggetto, quindi del Modulo di Classe, sia di Form che Standard.

    Serve fare la risoluzione ESPLICITA, così:

    CurrentDb.Execute "UPDATE tblRubricaPEC SET [Seleziona] = " & chkTutti & " WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null And " & Me.Filter, dbFailOnError
  • Re: Query di aggiornamento campo SI/NO

    27/09/2023 - VBAndre ha scritto:


    quindi proverei con

    Private Sub chkTutti_AfterUpdate()
    'CASELLA CONTROLLO "TUTTI"
        CurrentDb.Execute "UPDATE tblRubricaPEC SET [Seleziona] = " & chkTutti & " WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null And Me.Filter", dbFailOnError
    
    End Sub

    Ciao, 

    scusa dell'osservazione che vado a fare e che avevo già evidenziato in precedenza… ma come farebbe a risolvere all'interno della stringa sql la Me.Filter messa in questo modo ? 

    ...WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null And Me.Filter", dbFailOnError

    a mio avviso può solo restituire errore per campo Me.Filter non trovato nel costrutto della tabella da aggiornare…. o no ? 

    Invece, sempre se il contenuto della Me.Filter è coerente con la sintassi della stringa Sql, a mio avviso deve essere concatenata alla stringa Sql in questo modo:

    ...WHERE [STATO] = 'ATTIVA' And [NOMENCLATURA CASELLA] Is Not Null And " &  Me.Filter", dbFailOnError

    Aggiungerei anche che se la Me.Filter è vuota, l'istruzione Sql restituisce errore per sintassi in quanto risulterebbe una stringa Sql di questo tipo:

    ...WHERE STATO = ATTIVA And NOMENCLATURA CASELLA Is Not Null And 
  • Re: Query di aggiornamento campo SI/NO

    27/09/2023 - @Alex ha scritto:


    Non può andare di certo quel predicato SQL…!!!

    Ciao @Alex, come va? scusa ma non ti avevo visto prima di inviare il mio post… ;-)

    (mi verrebbe da dire… ma almeno le basi 'n do sono ?)

    ;-))

    Un caro saluto

  • Re: Query di aggiornamento campo SI/NO

    Ci siamo accavallati… capita, ma abbiamo fatto la stessa considerazione… quindi benissimo.

  • Re: Query di aggiornamento campo SI/NO

    27/09/2023 - @Alex ha scritto:


    Non può andare di certo quel predicato SQL…!!!

    Pardon.. a rispondere in fretta..

Devi accedere o registrarti per scrivere nel forum
7 risposte