Filtro diverse combobox anche vuote

di il
6 risposte

Filtro diverse combobox anche vuote

Buongiorno a tutti amici, dopo anni mi ritrovo a programmare in access/vba e diconseguenza mi ritrovo qui!

La questione che vorrei risolvere è questa: in un form ho 4 combobox che devono filtrare una query. non sono a scelta obbligata e dunque, nel filtro, deve essere presente l'opzione "non considerare questa combobox se è vuota".

il problema: se possibile, vorrei evitare una funzione if..then..also che consideri tutti i casi possibili (se sono tutte ON, tutte OFF, sono ON la prima e la terza, o la seconda e la prima ecc...).

una possibile soluzione teorica, che però non so come venga attuata, potrebbe essere questa (in pseudocodice):

'PSEUDOCODICE:

dim ctl as form.control

For each ctl in me.form

	Se ctl è combobox allora
		se ctl.listindex>-1 allora ...
	End if	
next ctl

6 Risposte

  • Re: Filtro diverse combobox anche vuote

    Se hai 4 combo ti stai facendo un problema che non esiste... quel codice oltre essere inutile poi ti impone di aggiungere codice per capire a quale combo stai facendo riferimento in un ciclo simile.

    Fossi i te mi concentrerei su un codice ben fatto non pensando sia più tecnico quando non lo è ed in questo caso non lo è.
  • Re: Filtro diverse combobox anche vuote

    Scusa, non ho capito. io programmo così, per passione, quando posso (e in questo periodo posso molto ).
    non so cosa intendi per "problema che non esiste" nè, tantomeno, per "codice ben fatto" o "tecnico".

    avevo anche provato l'opzione commandbutton: l'idea era che cliccandoci sarebbe partitol'sql che avrebbe fatto da filtro MA...il problema si ripone,ovvero nella condizione WHERE dovrei legare le 4 clausole tra loro con l'operatore "AND"..ma se la casella è vuota?

    non capisco come ragionare, sono 3 giorni che faccio esperimenti ma nel loop ci sono finito io!
  • Re: Filtro diverse combobox anche vuote

    denial ha scritto:


    Scusa, non ho capito. io programmo così, per passione, quando posso (e in questo periodo posso molto ).
    Allora siamo in 2 che programmiamo per passione... e purtroppo non sei l'unico che in questo periodo ha molto tempo, pare siano in tanti a buttarsi in cose così... io "purtroppo o per foruna", lo dico perché si può attribuire un senso soggettivo a questo, lavoro senza pausa forse più di prima... ma ti assicuro che ci si può anche dedicare alla pizza però...

    denial ha scritto:


    non so cosa intendi per "problema che non esiste" nè, tantomeno, per "codice ben fatto" o "tecnico".

    avevo anche provato l'opzione commandbutton: l'idea era che cliccandoci sarebbe partitol'sql che avrebbe fatto da filtro MA...il problema si ripone,ovvero nella condizione WHERE dovrei legare le 4 clausole tra loro con l'operatore "AND"..ma se la casella è vuota?

    non capisco come ragionare, sono 3 giorni che faccio esperimenti ma nel loop ci sono finito io!
    Hai abbozzato un codice inutile, si usa la.collecrion control quando di deve fare un cuclo in vista scala senza avere specificità di controllo...
    Nel tuo caso hai 4 o 5 controlli combobox ed ognuna va gestita singolarmente usare un ciclo come hai fatto ti costringerebbe a mettere un passo condizjonale per NOME al fine di comporre la stringa...

    Se ctl.Name="nomecampo1" then...
    Se ctl.name="nomecampo2".... ecco

    Questo rende il ciclo assolutamente inutile non credi.
    I filtri o where condition si compongono in.modo molto lineare dal momento che non saranno mai 1500 parliamo al massimo di una decina in una standard visione di progetto, quindi si può semplificare e rendere molto chiaro e leggibile il codice cosi:
    
    Dim strWH As String
    If Len(Me!Combo1.Value & vbNullString) > 0 Then strWH = strWH & "campo1=" & Me!Combo1.Value & " and "
    If Len(Me!Combo.Value & vbNullString) > 0 Then strWH = strWH & rcampo2=" & Me!Combo2.value & " and "
      ' qui metti le eventuali altre 77 condizioni.....
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    Me.Filter = strWH
    Me.FilterOn = True
    
    
    Fai attenzione alla sintassi dei campi oggetto di filtro... nel mio esempio sono Numerici, se fossero stringhe servirebbero gli apicetti se fosse una data quello che serve per le date...
  • Re: Filtro diverse combobox anche vuote

    anche io programmo per passione
    piccola curiosità: era una battuta? cioè sei programmatore di professione, ma cioè non toglie che manchi la passione, oppure non lo fai di professione?

    comunque, sì faccio anche pizze, pane, dolci, cucino, giardinaggio e programmo!

    ironia della sorte, il codice filtro che mi hai proposto è lo stesso che mi suggeristi anni fa quando avevo un problema simile! lo ricordo e lo riutilizzo ancora!!

    provo vergogna e umiliazione nello scoprire che funziona alla grande anche in questo caso! mi ero inerpicato in ragionamenti assurdi conl'OR ecc...

    Alex, grazie ancora una volta!
  • Re: Filtro diverse combobox anche vuote

    C'è una cosa che non capisco: nel tuo codice metti, alla fine, un "AND" nel caso una combobox sia stata valorizzata. me nell'ipotesi in cui nessun altra combobox venga selezionata, quell' "AND" senza proseguio non dovrebbe generare errore?
  • Re: Filtro diverse combobox anche vuote

    Allora prima di tutto non mangio programmando, faccio altro, questo può escludermi dal professionismo in quanto tale altra cosa è la professionalità con cui uso access...
    In questo caso credo di conoscerlo con alta professionalità... pur essendo una mia passione o malattia...

    Se guardi metto sempre AND in quanto il primo controllo non sa se quello dopo esiste... ma alla fine l'istruzione prima dell'applicazione del filtro rimuov l'AND finale che può derivare dal primo o dall'ultimo... per assicurarmi di rendere la stringa funzionale.

    P.s. questo metodo funzionera anche tra 5 anni quando magari riguarderai ancora questi aspetti
Devi accedere o registrarti per scrivere nel forum
6 risposte