Come inserire un pulsante su di un form per filtrare velocemente

di il
9 risposte

Come inserire un pulsante su di un form per filtrare velocemente

Buongiorno,

mi sono imbattuto in questo problema.

Ho un form che è legato ad una tabella.

La tabella ha due campi soltanto:

tagnumber (di tipo testo breve)

flag (di tipo yes/no)

quello che vorrei fare sono due cose essenzialmente:

1) pulsante-1 che su evento click mi chieda di digitare la stringa che deve essere cercata nel gruppo tag number e filtrare la visualizzazione con i soli tagnumber che contengono la stringa (dovrei utilizzare un like%stringadacercare%)

2) pulsante-2 che mi cambia il valore a tutti record che hanno il campo flag=yes riportandomelo al valore iniziale flag=no

Praticamente dopo aver premuto il pulsante-1 , il campo flag da no a yes viene fatto a mano ed infine il pulsante 2 mi serve per pulire la tabella e riportarla allo stato iniziale.

Vorrei fare tutto da codice senza macro, però ho bisogno di uno spunto per partire.

Grazie

fcaliandro

9 Risposte

  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    Metti una TextBox ed una CheckBox stato Triplo(Accetta 0/-1/Null) ed un pulsante di applica filtro.

    Private Sub NomePulsanteApplicaFiltro_Click()
    	Dim sWH	As String
    	If Len(Me!NomeTextBoxTAG.Value+vbNullstring)>0 Then sWH="CampoTAG LIKE '*" & me!NomeTextBoxTAG & "*' AND "
    	If Len(Me!CheckBox.Value + vbNullstring)>0 Then sWH=sWH + "CampoFlag = " & Cint(Me!CheckBox.Value) & " AND "
    	If Len(sWH) >0 Then 
    		sWH=Mid$(sWH,1,Len(sWH)-5)
    		Me.Filter=sWH
    		Me.FilterON=True
    	Else
    		Me.FilterON=False
    		Me.Filter=vbNullstring
    	End If
    End Sub
  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    Grazie Alex, mi sto incartando con le virgolette. quale regola devo seguire? Vedi sotto cosa ho scritto ma non funziona...

        Me.Filter = "[TAG NO MASTER] LIKE "" * " & Me.Text61 & " * """""""
        
  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    RISOLTO

    COSI FUNZIONA, GRAZIE ALEX

        Me.Filter = "[TAG NO MASTER] LIKE """ & "*" & Me.Text61 & "*" & """"
  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    Le doppie virgolette non servono, come vedi fanno solo molta confusione... la sintassi che ti avevo suggerito andava bene, usava gli APICI SINGOLI, e considerava entrambi i criteri.

  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    04/12/2024 - @Alex ha scritto:

    Le doppie virgolette non servono, come vedi fanno solo molta confusione... la sintassi che ti avevo suggerito andava bene, usava gli APICI SINGOLI, e considerava entrambi i criteri.

    Alex,

    vorrei imparare il tuo metodo. Per questo ti chiedo un chiarimento.

    Hai creato sWH una variabile di tipo string.

    Il tuo metodo è che utilizza gli apici è fattibile solo creando la variabile di tipo string che sostituisce l'istruzione SQL?

    Per capire se nel mio caso posso farlo lo stesso.. (non ho creato la variabile di tipo string)

    Grazie

    Francesco

  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    Il problema non è la variabile Stringa, ne gli apici...!

    Me.Filter = "[TAG NO MASTER] LIKE '*" & Me.Text61 & "*'"

    Questa è la sintassi con gli apici singoli... ma, tu hai 2 Criteri che potenzialmente possono essere attivabili anche insieme, il tuo metodo non lo permette, te ne sei reso conto...?

    Per poter gestire entrambi i criteri senza scrivere una riga di codice ingestibile come si fa in Excel, serve appoggiarsi ad una variabile temporanea, in questo caso serve di tipo Stringa, che facilita la gestione dei singoli criteri e di conseguenza la composizione finale del criterio completo, e solo dopo aver gestito il tutto si passa alla proprietà Filter il valore finale.

     Ora questi concetti sono la base della programmazione, e non è pensabile affrontarla in un Forum dovresti intanto capire bene cosa significa scrivere codice VBA... i concetti id base e con quelli poi affrontare le possibili implementazioni successive chiedendo al Forum... ma almeno le basi devi averle.

  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    04/12/2024 - @Alex ha scritto:

    Len(Me!NomeTextBoxTAG.Value+vbNullstring)>0

    Se Me!NomeTextBoxTAG.Value è Null quell'espressione darà Null, né vero né falso. Che poi si ottenga lo stesso risultato, cioè non far eseguire l'istruzione dopo il Then che è alla fine quello che comunque si vuole, ma "concettualmente" non è giusto. In pratica, è del tutto indifferente concatenare vbNullString con il segno + o lasciare solo il valore del controllo.

    L'uso del vbNullString serve per trattare come una situazione sola sia la ZLS sia il Null. Però bisogna concatenare con &, in grado di disattivare la propagazione del Null.

    Len(Me!NomeTextBoxTAG.Value & vbNullstring) > 0

    Ho sbagliato quèl?

  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    @ Alex, @ Phil

    grazie , verifico meglio perchè il vostro metodo è quello più adatto.

  • Re: Come inserire un pulsante su di un form per filtrare velocemente

    04/12/2024 - Philcattivocarattere ha scritto:

    04/12/2024 - @Alex ha scritto:

    Len(Me!NomeTextBoxTAG.Value+vbNullstring)>0

    Se Me!NomeTextBoxTAG.Value è Null quell'espressione darà Null, né vero né falso. Che poi si ottenga lo stesso risultato, cioè non far eseguire l'istruzione dopo il Then che è alla fine quello che comunque si vuole, ma "concettualmente" non è giusto. In pratica, è del tutto indifferente concatenare vbNullString con il segno + o lasciare solo il valore del controllo.

    L'uso del vbNullString serve per trattare come una situazione sola sia la ZLS sia il Null. Però bisogna concatenare con &, in grado di disattivare la propagazione del Null.

    Len(Me!NomeTextBoxTAG.Value & vbNullstring) > 0

    Ho sbagliato quèl?

    Sbagli quel.

    La TextBox, che non è un Type String, ma Variant, può contenere Numeri, Testo(quindi caratteri) ma anche NULL, ad esempio quando non è mai stata valorizzata o nullstring quando da Pippo cancelli e salvi, dovrebbe contenere NullString, e come sai NULL<>NULLSTRING.

    Ora il tutto dipende da come effettui il controllo sul contenuto della TextBox... se usi IsNull, non intercetti NullString, se usi LEN(...) avrai errore in caso di Null in quanto il Type String supportato da LEN non supporta NULL.

    Il problema quindi è che tu devi intercettare entrambi sia NULL che NULLSTRING possibilmente in un solo colpo e magari senza generare errore...!

    La concatenazione del contenuto della TextBox, a prescindere di cosa sia, con vbNullString, di fatto forza un Casing del DataType al Type=String dominante, consentendo quindi alla Funzione LEN a poter valutare appunto la Lunghezza, senza generare errore.

    Va da se che se il contenuto è già String, es. "Pippo" la concatenazione con vbNullString non modifica il contenuto ne il Type.

    04/12/2024 - Philcattivocarattere ha scritto:

    ..... ma "concettualmente" non è giusto. In pratica, è del tutto indifferente concatenare vbNullString con il segno + o lasciare solo il valore del controllo.

    Ora veniamo alla concatenazione.

    L'uso del vbNullString serve per trattare come una situazione sola sia la ZLS sia il Null. Però bisogna concatenare con &, in grado di disattivare la propagazione del Null.

    Nel mio esempio ho usato il [+] per concatenare... non [&], perchè il [+] non è solo operatore matematico, è un operatore intelligente...!

    Ora in VBA il risultato non è equivalente in effetti da VBA serve usare &, che forza il TYPE a String... 

    1+"A"--> Errore
    1 & "A"--> 1A (stringa)
    ""+Null --> "" (Stringa)
    "" & NULL -->"" (Stringa)

    ma prova a mettere la concatenazione di stringhe nel predicato SQL con [&] e facci sapere se funziona.

    SELECT * FROM T1
    WHERE LEN([Campo1] & '')>0

    La risposta è NO, questa sotto invece funziona.

    SELECT * FROM T1
    WHERE LEN([Campo1] + '')>0

    Ti è chiaro...?

Devi accedere o registrarti per scrivere nel forum
9 risposte