Newsgroup: it.comp.appl.access
Titolo: Parametri da passsare alla query per ricerca avanzata

Ciao a tutti e buon giorno. Ho un problema che non risco a risolvere.
In un db voglio aggiungere una maschera di ricerca avanzata così
composta: 3 caselle combinate non associate (che contengono i dati) e
una casella di riepilogo (che ha come origine una query) dove
visualizzare i dati filtrati dalle caselle combinate. Per filtrare i
dati tramite le caselle combinate ho inserito nei parametri della
query : Like nz([miaCasella1];"*")-Like nz([miaCasella2];"*")-Like
nz([miaCasella3];"*") e tutto funziona. Nella query esiste un campo
che si chiama ProvinciaObiettivo dove sono contenute le sigle delle
provincie ( MI - LU - GE ecc. ecc.), quello che vorrei e' fare in modo
di poter filtrare le provincie in questo modo : "Tutte le provincie",
"provincia di milano", oppure "tutte le provincie tranne milano".
Insomma vorrei una maschera dove poter scegliere i parametri di
ricerca in modo che se , per esempio, nella casella di riepilogo
"cause" non digito nulla non mi venga filtrato con quella casella il
campo "cause". Sperando in un vostro aiuto vi ringrazio in anticipo

campo "cause". Sperando in un vostro aiuto vi ringrazio in anticipo
Credo che tu abbia alla fine della form un pulsante che lancia la ricerca. In questo caso puoi fare un ciclo su tutte i controlli (riepilobo, combo, testo quello che ti serve) e costruire la stringa di ricerca usano il nome della casella (= a quello della tabella su cui cercare) o meglio ancora la proprietà tag. Se nel ciclo controlli il valore e metti un if control.value<>"" allora aggiungi alla stringa, se no nulla, ottieni ciò che chiedi, ossia una stringa di ricerca con solo i valori dei controlli 'riempiti'. Sembra complicato ma ti assicuro che una volta scritto il codice con i dovuti controlli funziona a meraviglia (e puoi aggiungere anche campi dello stesso tipo senza modificare + nulla)
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 Credo che tu abbia alla fine della form un pulsante che lancia la ricerca.
[risposta] Si, proprio così
In questo caso puoi fare un ciclo su tutte i controlli (riepilobo,
combo, testo quello che ti serve) e costruire la stringa di ricerca
usano il nome della casella (= a quello della tabella su cui cercare)
o meglio ancora la proprietà tag. Se nel ciclo controlli il valore e
metti un if control.value<>"" allora aggiungi alla stringa, se no
nulla, ottieni ciò che chiedi, ossia una stringa di ricerca con solo i
valori dei controlli 'riempiti'.
[risposta] sinceramente non sonon molto pratico dei cicli, cioe' li ho
usati per le barre di scorrimento ma nulla piu'.
Sembra complicato ma ti assicuro che una volta scritto il codice con i
dovuti controlli funziona a meraviglia (e puoi aggiungere anche campi
dello stesso tipo senza modificare + nulla)
[risposta] ho il timore che per me sia veramente complicato, qualche
indicazione in piu'?
grazie


Ti faccio un esempio (questo è un motore di ricerca multicampo). X semplificare facciamo il caso di una tabella 'piatta', con tutte le info che ti servono. I tuoi campi nella tab sono ARTISTA-TITOLO-PRODUTTORE ok? Bene, ora tu fai una form NON ASSOCIATA con tre caselle di testo. Il loro nome è ARTISTA-TITOLO-PRODUTTORE 
Ok. Sul pulsante CERCA inserisci un codice tipo
Dim C as control
Dim StrSql as string
Dim StringaDiRicerca as string
' ciclo su tutti i controlli della form SOLO LE CASELLE DI TESTO
for each c in me.form then
    if C.ControlType = 109 then
       if c.value <> "" then
          strsql = StrSql & "[" & 
c.name
 & "] like '" & c.value & "*' AND "
       end if
    end if
next
StringaDiRicerca = "WHERE " & Left(strsql , Len(strsql ) - 5)
StrSqlGLOB= "SELECT TABELLA(ARTISTA,TITOLO,PRODUTTORE) FROM TABELLA " & StringaDiRicerca & ";"
docmd.openForm "MostraRicerca"
dove 'su caricamento' imponi
me.recordsource=StrSqlGLOB
dove StrSqlGLOB è una variabile stringa memorizzata nei moduli come Public
Public StrSqlGLOB as String
così la puoi vedere da tutta l'applicazione
Ora hai una ricerca in cui concateni il criterio WHERE solo se riempi il campo interessato. La ricerca quì presentata è per iniziali del campo e concatena i campi con AND. Ovviamente si può estendere e complicare a piacere.....Spero sia un po' + chiaro ora


 Public StrSqlGLOB as String
[risposta] fatto ma non mi funziona, cioe' quando si apre la maschera
MostraRicerca escono le finestrelle per l'inserimento dei parametri.
ti posto il codice ok?
Dim C As Control
Dim StrSql As String
Dim StringaDiRicerca As String
' ciclo su tutti i controlli della form SOLO LE CASELLE DI TESTO
For Each C In Me.Form
    If C.ControlType = 109 Then
       If C.Value <> "" Then
          StrSql = StrSql & "[" & C.name & "] like '" & C.Value & "*'
AND "
       End If
    End If
Next
StringaDiRicerca = "WHERE " & Left(StrSql, Len(StrSql) - 5)
StrSqlGLOB = "SELECT Tabella.artista, Tabella.titolo,
Tabella.produttore" _
             & " FROM Tabella " _
             & " stringadiricerca "
'" & StringaDiRicerca & ""
DoCmd.OpenForm "MostraRicerca"
ciao ciao

ops... la riga '" & StringaDiRicerca & "" è un commento non ha nessuna
funzione nel codice

chiedo scusa perche' il codice di Fair87 funziona, sono un po'
imbranato....
E' possibile ora fare una ricerca del tipo : fammi vedere tutti i
record delle citta' diverse da Milano? Oppure fammi vedere tutti i
record non inseriti da Sergio?
Grazie e ciao

sergiofanti@hotmail . it ha scritto:

Di solito in informatica si può fare quasi tutto......implementa dei campi boolean (o per tutta la forma o per ogni campo che hai) con 'inizia per', 'contiene', 'esclude' e li utilizzi quando costruisci la stringa. Tieni conto xò che a volte i motori di ricerca troppo complicati (anche se efficentissimi) spaventano l'utente....che sia il caso di farne 2, uno semplice e uno avanzato?


 Di solito in informatica si può fare quasi tutto......implementa dei campi boolean (o per tutta la forma o per ogni campo che hai) con 'inizia per', 'contiene', 'esclude' e li utilizzi quando costruisci la stringa. Tieni conto xò che a volte i motori di ricerca troppo complicati (anche se efficentissimi) spaventano l'utente....che sia il caso di farne 2, uno semplice e uno avanzato?
 [risposta] grazie tante per l'aiuto e dei tuoi consigli, hai ragione,
farò due maschere di ricerca, semplice e avanzata, è la soluzione
migliore. ciao e grazie