Condividi tramite

Ma perché il filtro non filtra e se filtra filtra male?!?!?

Anonimo
2023-04-13T16:19:40+00:00

Win 10

Access 2007

Non arrabbiatevi per il titolo della mia domanda ma quando non capisco mi rimbamisco più di quanto già sono!!!

ho la mia bella maschera continua (con origine dati una query) che utilizzo per poter affinare la ricerca selezionando vari parametri.

per filtrare utilizzo caselle combinate e caselle di controllo.

nelle caselle di controllo mi sono preoccupato di impostare "state triplo" SI

e DopoAggiornamento "Filtra_Click"

Option Compare Database

Option Explicit

Private strFilter As String

Private Sub Filtra_Click()

   strFilter = vbNullString

   With Me

     If Not IsNull(.CasellaControllo1) Then strFilter = strFilter & " And Campo1  = " & .CasellaControllo1

     If Not IsNull(.CasellaCombinata20) Then strFilter = strFilter & " And Campo20  = " & .CasellaCombinata20

  If Not IsNull(strFilter) Then

     strFilter = "1=1 " + strFilter

        .Filter = strFilter

        .Filter = True

    Else

        .FilterOn = False

        .Filter = vbNullString

    End If 

End With

End Sub

per alcune caselle di controllo, al momento di caricare la maschera ho messo come valore predefinito 0 perché nella maggioranza dei casi quelle caselle non devono essere spuntate e come mi avete insegnato Voi la casella di controllo ha 3 stati: null - 0 e -1

quello che mi manda in bestia è che quando apro la maschera giustamente vedo tutti i record,

poi seleziono dalla casellacombinata il valore da ricercare e va tutto bene, ma e come se non mi prende in considerazione le caselle di controllo che avevo predisposto con valore iniziale = 0

allora tolgo il valore predefinito e ripeto la ricerca.

stessa cosa se faccio il primo ciclo di ricerca non esce il valore corretto, se ripeto nuovamente il passaggio di spuntare la casella di controllo fino al valore 0 alla fine mi restituisce la risposta corretta.

ho anche provato a mettere un pulsante per refresh della maschera ma niente.

diciamo che la maschera di ricerca (filtro) non è affidabile se ogni volta devo ripetere le selezioni più volte.

non riesco a capire perché questo accade.

spero di essermi spiegato :)

un caro saluto

Ivan

Microsoft 365 e Office | Accesso | 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

6 risposte

Ordina per: Più utili
  1. Anonimo
    2023-04-17T07:18:52+00:00

    Buongiorno Karl,

    grazie per il supporto

    il secondo errore era una mia errata trascrizione.

    ho provveduto ad apportare le tue modifiche ma ho sempre il problema di forzare più volte la selezione dei campi per ottenere il risultato corretto.

    mannaggia mannaggia

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-04-17T07:10:53+00:00

    buongiorno Abdal,

    grazie per il supporto ma con la traduzione di google il codice è mezzo in inglese e mezzo in italiano e faccio fatica a capirlo :)

    se puoi rimandarlo senza traduzione sarebbe meglio,

    grazie

    Ivan

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-04-13T18:02:38+00:00

    Salve,

    Vedo 2 errori e 1 debolezza nel tuo codice in questa parte:

    If Not IsNull(strFilter) Then

    strFilter = "1=1 " + strFilter

    .Filter = strFilter

    .Filter = True

    Else

    Invece prova con:

    If strFilter>"" Then

    strFilter = "1=1 " & strFilter

    .Filter = strFilter

    .FilterOn = True

    Else

    Vuol dire:

    errore 1: strFilter non puo mai essere Null perché si tratta di un string che al minimo è "" o vbNullString. Quindi il codice va sempre in questa parte del blocco If.

    debolezza: per concatenare testo è più sicuro di usare l'operatore & invece di + che rischia un'azione matematica

    errore 2: .Filter = True invece di FilterOn imposta il filtro su True invece di attivarlo

    Servus
    Karl
    ****************
    Access Bug Trackers
    Access News
    Access DevCon

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-04-13T17:44:43+00:00

    Forse se posti un file di esempio è più semplice capire che cosa hai realizzato e quindi aiutarti.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2023-04-13T17:19:51+00:00

    Ciao

    Sono Abdal e sarei felice di aiutarti con la tua domanda.

    Sembra che il problema possa essere correlato al valore iniziale delle caselle di controllo impostato su 0, che non viene correttamente contabilizzato nel codice del filtro.

    Quando una casella di controllo ha un valore predefinito pari a 0 e si trova nello stato null, Access la considererà come se fosse selezionata, il che potrebbe non essere quello desiderato. Nel codice, si sta controllando il valore della casella di controllo utilizzando la funzione IsNull, che non funzionerà correttamente in questo scenario.

    Per risolvere questo problema, è consigliabile modificare il valore predefinito delle caselle di controllo in Null anziché 0 e modificare il codice per verificare la presenza di valori Null e -1. Ecco un esempio di come è possibile modificare il codice:

    Sub privato Filtra_Click() strFilter = vbNullString Con me Se. casella di controllo1 = -1 oppure . Checkbox1 = Null Then strFilter = strFilter & " And Campo1 = " & . Casella di controllo1 Fine Se Se non IsNull(. CombinedBox20) Quindi strFilter = strFilter & " And Field20 = " & . CombinedBox20 Fine Se If Not IsNull(strFilter) Then strFilter = "1=1" + strFilter . Filter = strFilter . FilterOn = True Altro . FilterOn = False . Filtro = vbNullString Fine Se Termina con Fine sub

    Questo codice controlla se la casella di controllo è -1 (selezionata) o Null e la aggiunge alla stringa di filtro solo se soddisfa uno di questi criteri.

    Spero che questa informazione aiuti.

    Saluti

    Abdal

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    0 commenti Nessun commento