+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Creare query via VBA valutando le opzioni

  1. #1
    Jocman non è in linea Scolaretto
    Post
    321

    Creare query via VBA valutando le opzioni

    Ciao a tutti.
    Sto giocherellando per vedere se riesco a creare una maschera di ricerca un pò complessa (a seconda di quello che imposterò vorrei poter limitare la ricerca alla sola tabella padre o nel caso servisse a una o più tabelle figlie).

    Sto impostando i criteri di ricerca utilizzando dei toggleButton abbinati a delle combobox: selezionando il toggle genererei il campo della tabella in cui è contenuto il dato da ricercare (questo selezionato dalla relativa combobox).

    una volta fatte le scelte, premendo il pulsante CERCA mi costruisce la query risultante e da gli esiti.

    O almeno questo è quello che spero ottenere; qualcosa di simile lo avevo già fatto in passato, ma non così articolato, per cui sto procedendo per gradi, costruendo la maschera con i vari elementi e scrivendo mano mano il codice.

    Nella mia idea, tra le opzioni (i toggleButton) che sto creando ce ne è una (diciamo PIPPO, che però è abbinato ad una textbox) che per forza di cose sarà...singola, cioè deve generare una sql del tipo:

    codice:
    SELECT * FROM tabella WHERE [Valore]='" & testo selezionato in maschera
    La ratio è che io già so che selezionando PIPPO otterrò un solo record (o nessuno qualora non esista il valore immesso), quindi non avrei alcuna necessità di aggiungere criteri di selezione.

    Poichè ci sono diversi toggle e relative combo di scelta, vorrei fare in modo che premendo CERCA, qualora PIPPO fosse selezionato con altri toggle, mi avvisasse dicendomi "guarda che PIPPO non è selezionabile insieme ad altre opzioni"

    Solo che non idea di come farglielo fare.....

    Andrea

  2. #2
    L'avatar di muttley005
    muttley005 non è in linea Scribacchino
    Post
    1,963
    non capisco il problema, all'inizio della funzione generata dal CERCA metti qualcosa del tipo
    codice:
    if not ControlloOK then exit sub
    dove controlloOK è
    codice:
    private function ControlloOK as boolean
    ...
    end functione
    e all'interno scrivi che se PIPPO è valorizzato nessuno degli altri controlli lo deve essere
    ad esempio facendo un ciclo cui controls (io preferisco utilizzare per comodità anche la proprietà TAG)
    quindi
    codice:
    private function ControlloOK as boolean
    ... eventuale codice prima
    
    'controllo per PIPPO
       if trim$(nz(me.pippo,vbnullstring))<>vbnullstring then
          for each C in me.controls
             if C.TAG="xxx" and not isnull(C.value) then exit function
          next
       end if
       
    ... eventuale codice dopo
       ControlloOk=True
    end function
    ovviamente devi mettere "XXX" nella TAG dei controlli che vuoi appunto controllare

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,220
    Non ho capito molto... ma ti espongo un esempio di come gestisco una sorta di MultiFiltro:
    codice:
    Dim strWH as String
    If Len(Me.cmbAnagrafica & "")>0 Then strWh="IdAnagrafica=" & Me.cmbAnagrafica & " AND "
    If Len(Me.cmbOggetto & "")>0 Then strWH=strWH & "Oggetto='" & Me.cmbOggetto & "' AND "
    If Len(Me.cmbDocumento & "")>0 Then  strWH=strWH & "IdDocumento=" & Me.cmbDocumento & " AND "
    ' quì metti tutti gli altri [n] controlli di criterio...
    If Len(strWH)>0 Then 
        strWH=Mid$(StrWH,1,Len(strWH)-5) 
        Me.Filter=strWh
        Me.FilterOn=True
    Else
        Me.FilterOn=False
        Me.Filter=vbNullstring
    End If
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  4. #4
    Jocman non è in linea Scolaretto
    Post
    321
    L'interruttore "PIPPO" mi serve come unico criterio di selezione perchè, in pratica, è il numero di protocollo di un documento (ecco perchè associato ad una textbox) e che quindi come tale è unico, ecco perchè dicevo che la risposta della query potebbe essere solo SI o NO. Aggiungere a PIPPO altri criteri di ricerca sarebbe inutile in quanto se non esiste quel protocollo non ha senso cercare altri valori (ed ecco perchè se PIPPO fosse attivo insieme ad altri interruttore vorrei mi avvisasse, altrimenti riceverei orisposta negativa (non c'è il protocollo immesso) o comunque una sola risultanza, quando magari avevo altre esigenze di ricerca.

    Grazie ad entrambe per gli ottimi consigli.

    Andrea

  5. #5
    L'avatar di muttley005
    muttley005 non è in linea Scribacchino
    Post
    1,963
    se è così potresti gestire il tutto anticipando il CERCA ... almeno io lo troverei anche + chiaro per l'utente.
    quindi alla compilazione del PIPPO annulli (e disabiliti?) il resto

  6. #6
    Jocman non è in linea Scolaretto
    Post
    321
    Si, potrebbe essere una soluzione, ma mi immagino già già la scena.....
    Tizio che imposta 3 o 4 criteri di scelta (mi limito nel numero...), poi la genialata: aspetta mi pare che la 23/4 fosse una di quelle che cerco, ci metto pure quella. Preme il relativo interruttore e puff! magicamente gli resetta tutti gli altri controlli
    Ricomincia daccapo (dopo aver consultato il calendario di frate indovino per il mese di gennaio), rifà la stessa cosa e così via fino a fine calendario. E poi forse (forse) mi verrebbe a chiedere il perchè.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi