Filtrare Caselle di riepilogo su dati casella di testo

di il
7 risposte

Filtrare Caselle di riepilogo su dati casella di testo

Buonasera a tutti, sono qui nuovamente a disturbarvi ma questa volta per una funzione che ho usato precedentemente in altri file e non mi ha causato problemi, misteriosamente su questo file non so perchè non riesco a farla funzionare. ho una maschera che contiene 1 casella di Testo e 1 casella di riepilogo, la casella di testo ( Testo9) non è associata mentre la casella di riepilogo è associata ad una tabella dalla quale prende solo i campi IdPaziente, Cognome, Nome e Data di Nascita. La casella di testo (testo9) mi serve perchè man mano che scrivo il cognome e nome del paziente La casella di riepilogo si deve filtrare su quel paziente, a questo punto nei campi associato alla casella di riepilogo ho inserito questo criterio:

[forms]![Menu]![Testo9]

Vorrei allagare il file ma non riesco non so da dove farlo.

Grazie a quanti mi sanno dire dove sbaglio.

7 Risposte

  • Re: Filtrare Caselle di riepilogo su dati casella di testo

    Intendi filtrare durante la digitazione del testo? 

  • Re: Filtrare Caselle di riepilogo su dati casella di testo

    Ciao 

    ma la Listbox non è come una Combobox

    Per filtrare la Listbox hai almeno due possibili soluzioni che io sappia:

    • man mano che scrivi sull'evento text change esegui una ricerca stringa (per like magari) con un ciclo sulla casella di riepilogo 
    • oppure mano a mano che scrivi nella textbox e sempre sull'evento text change, si va a filtrare l'origine records della listbox

    diversamente con la combobox puoi spostare l'indice di riga sulla base della textbox, ma questo è un altro discorso e metodo

    ;-)

  • Re: Filtrare Caselle di riepilogo su dati casella di testo

    01/10/2023 - VinSer ha scritto:


    per una funzione che ho usato precedentemente in altri file e non mi ha causato problemi, misteriosamente su questo file non so perchè non riesco a farla funzionare

    Allora, … per una listbox il tuo sistema non potrebbe mai e poi mai funzionare… se mi fai un favore, mi fai vedere come funziona su altri tuoi database? (ma giusto per curiosità) 

    Detto ciò, su una ListBox potresti fare una cosa di questo tipo , ma dipende ovviamente da quanti elementi hai nella ListBox

    Per esempio … poniamo di avere una TextBox di nome TxtSearch e una ListBox di nome YourListbox e per la TextBox usiamo l'evento Change:

    ' LISTBOX DYNAMIC SEARCH ITEM
    Private Sub TxtSearch_Change()
    ' selected clear
    Dim i As Integer
    For i = 0 To Me.YourListbox.ListCount - 1
        Me.YourListbox.Selected(i) = False
    Next i
    ' search item
    For i = 0 To Me.YourListbox.ListCount - 1
        If InStr(1, Me.YourListbox.ItemData(i), Me.TxtSearch.Text, vbTextCompare) > 0 Then
            ' item selected
            Me.YourListbox.Selected(i) = True
            Exit For
        End If
    Next i
    End Sub
    • se la ListBox ha più colonne allora sostituire la condizione If con l'istruzione Instr in questo modo:
    If InStr(1, Me.YourListBox.Column(1, i), Me.TxtSearch.Text, vbTextCompare) > 0 Then

    In questo esempio si ricerca la corrispondenza nella seconda colonna della listbox mentre si scorrono gli items.

    Se invece si vuole ricercare sulla base dei caratteri iniziali ( e quindi non in Parte) a partire da Sinistra, allora si userà:

    If Left(Me.YourListBox.Column(1, i), Len(Me.TxtSearch.Text)) = Me.TxtSearch.Text Then
    

    Pertanto come prima cosa si provvede a deselezionare gli Items
    e come seconda cosa si ricerca, mano a mano che si digita nella texbox, se i caratteri e la parola che si sta componendo, coincide con uno degli Items della listbox

    Il risultato sarà quello di vedere selezionata, mano a mano che si digita, prima una e poi via via le altre riga che corrispondono a tutti o in parte ai caratteri inseriti nella textbox.


    Mentre, come accennavo in precedenza, si può intervenire nel filtrare l'origine record della ListBox modificando con una where condition il contenuto della ListBox, sempre sulla base di quanto si sta digitando nella TextBox


    P.S.
    Sarebbe necessario fare attenzione quando si apre un Thread passando le informazioni corrette e complete in modo da poter ricevere delle risposte adeguate e altrettanto corrette. (tutto il resto è solo perdita di tempo inutile)

  • Re: Filtrare Caselle di riepilogo su dati casella di testo

    01/10/2023 - VinSer ha scritto:


    Buonasera a tutti, sono qui nuovamente a disturbarvi ma questa volta per una funzione che ho usato precedentemente in altri file e non mi ha causato problemi, misteriosamente su questo file non so perchè non riesco a farla funzionare. ho una maschera che contiene 1 casella di Testo e 1 casella di riepilogo, la casella di testo ( Testo9) non è associata mentre la casella di riepilogo è associata ad una tabella dalla quale prende solo i campi IdPaziente, Cognome, Nome e Data di Nascita. La casella di testo (testo9) mi serve perchè man mano che scrivo il cognome e nome del paziente La casella di riepilogo si deve filtrare su quel paziente, a questo punto nei campi associato alla casella di riepilogo ho inserito questo criterio:

    [forms]![Menu]![Testo9]

    Vorrei allagare il file ma non riesco non so da dove farlo.

    Grazie a quanti mi sanno dire dove sbaglio.

    Per filtrare, specifico bene Filtrare, una ListBox(Casella di Riepilogo) ci sono 2 metodi:

    1. Costruire un predicato SQL dinamico, e riassegnarlo al ROWSOURCE
    2. Agire sul RS di Controllo, e riassegnarlo dopo aver Filtrato il Rs

    Il secondo è leggermente più complicato, motivo per cui userei il primo.

    Quindi se hai una TextBox, su evento Change o KeyDown/KeyPress vai a modificare il predicato in questo modo:

    Dim sSQL	As String
    sSQL="SELECT * FROM T1 WHERE NomeCampoVisualizzato LIKE '" & Me!NomeTextBox.Text & "*'"
    Me.NomeListBox.RowSource=sSQL

    Ora da capire se vuoi cercare in modo assoluto nella stringa o Relativo all'inizio, nell'esempio che ti ho fatto è solo relativo all'inizio… nel caso metti il JOLLY(*) anche all'inizio.

    Questa tecnica(1) ha di brutto che devi memorizzare il predicato SQL originale da qualche parte… e non usare una Query, non conviene molto…

    Se invece usassi il RS puoi usare una Query senza Filtri ed applicare al RS alla sua proprietà FILTER il criterio e riassegnare il RS, ma questo richiede qualche base più spinta…

  • Re: Filtrare Caselle di riepilogo su dati casella di testo

    Per Franco… farei una nota sul metodo di RESET dellw selezioni che così come proposto rischia di essere una pietra al collo.

    Molti sono usi, anche se è assurdo, a popolare le ListBox e le Combo con migliaia di records… e quel ciclo diventerebbe un disasto.

    Prima di tutto lo si esegue, eventualmente sia da usare il ciclo, SOLO se la ListBox è in multiselezione altrimenti direi che il Selected è solo 1 e senza ciclare si resetta… con 1 riga.

    Se serve il ciclo ne farei solo 1 e non 2 perche se uno digita “z” li cicli tutti la seconda volta tutti o quasi, quindi basta eventualmente memorizzare se si è Selezionato il primo corrispondente con un Boolean e tutti gli altri si Resettano dentro un unico ciclo.

    Io tuttavia il ciclo se non necessario lo eviterei anche se siamo in Multiselezione a favore di questo trucchetto:

    Me!NomeListBox.Rowsource=Me!NomeListBox.Rowsource

    Saluti

  • Re: Filtrare Caselle di riepilogo su dati casella di testo

    02/10/2023 - @Alex ha scritto:


    Per Franco… farei una nota sul metodo di RESET dellw selezioni che così come proposto rischia di essere una pietra al collo.

    Ottimo @Alex… Me!NomeListBox.Rowsource=Me!NomeListBox.Rowsource lo provo subito … 
    Si anch'io lo eviterei assolutamente in virtù delle tue osservazioni. Giustissimo , non si sa mai…

    02/10/2023 - @Alex ha scritto:


    Prima di tutto lo si esegue, eventualmente sia da usare il ciclo, SOLO se la ListBox è in multiselezione altrimenti direi che il Selected è solo 1 e senza ciclare si resetta… con 1 riga.

    Giustissimo!!! 


    Comunque ho testato il tutto con un migliaio di records e già offre ottime prestazioni, … mentre come suggerito da te, non te ne accorgi nemmeno (ovviamente)


    E che per me le ListBox sono quegli oggetti di complemento per agevolare la selezione da elenco dai 2 ai 20 elementi e quindi non mi è mai necessitato farci sopra le ricerche o altre beghe, non lo ritengo uno strumento molto adatto in certi casi.

    P.S.
    Alla fine sono convinto di una cosa, per come ha formulato la richiesta, secondo me si è confuso con la ComboBox …. e allora avrebbe senso il metodo che usava e che funzionava per gli altri progetti… ;-)))

    Grazie mille @Alex!!! 
    un salutone.

  • Re: Filtrare Caselle di riepilogo su dati casella di testo

    Ragazzi buona sera e scusate, se rispondo solo ora, ma ho avuto una serie di problemi di salute e famigliari, comunque vogli ringraziarvi pe le risposte date @Alex ho serie difficoltà a gestire il tuo codice, provato oggi ma proprio non sono riuscito  a capirci nulla mi da tanti errori.  comunque ho oviato diversamente lasciando perdere questo tipo di funzione. Grazie comunque a tutti.

Devi accedere o registrarti per scrivere nel forum
7 risposte