Newsgroup: it.comp.appl.access
Titolo: problema con query

Ho creato una maschera con diverse caselle combinate e alcune caselle di
testo. Poi ho creato una query che "dopo l'aggiornamento" della maschera
viene eseguita e legge i valori selezionati nella maschera per estrapolare
solo determinati record. Sulla base di questa query ho creato un report che
ovviamente mi stampa i risultati.
C'e' un problema: come faccio a dire alla query di non considerare "vuote"
le caselle non selezionate della maschera che utilizzo come motore di
ricerca? Cioe' come faccio a dire alla query di considerare validi tutti i
valori di quelle caselle di testo dove non inserisco niente?
Grazie mille

Eux ha scritto nel messaggio ...

Attenzione: non mi funziona neanche la maschera: ho settato il controllo
After.Update sia alla query sia alle caselle di testo e combinate della
maschera... dov'e' il problema?

 wrote in message a173va$85o$1...@nreada.inwind.it...

Mettendo come criterio nella query sotto ogni campo filtro
like nz([forms]![tuaform]![unodeicontrolli];"*")
Antonio

Antonio Biso ha scritto nel messaggio ...

Ti ringrazio, faro' subito la prova. Questa istruzione mi consente anche di
non farmi chiedere dalla query quello che in realta' dovrebbe leggere nei
controlli????

 wrote in message a197l8$67j$1...@nreadb.inwind.it...

Tu hai due soluzioni:
preparare una query una volta per tutte che metta il criterio scritto come
sopra per tutti i campi candidati ad essere filtro. Questo però può
rallentare un po' le prestazioni della query in quanto un conto è non fare
filtro, un conto è fare like "*".Con grosse moli di dati questo può
pesicchiare, altrimenti è inapprezzabile.
L'altra soluzione può essere quella di crearti via codice la stringa SQL in
maniera dinamica. Ti vai a testare il contenuto dei controlli della maschera
e, solo nel caso di controlli pieni, aggiungi un WHERE nella stringa. La
stringa la userai come vuoi.
Ah, visto che si tratta di un report, in realtà non devi costruire l'intera
stringa:
il report avrà come origine record una query che restituisce tutti i record.
Tu passerai, all'apertura del report con openreport un parametro filtro
fatto in questo modo
"Città='" & controlloCittà & "' and età = " & controlloetà
e così via, mettendoci però solo i filtri pieni...
Antonio


AIUTOOOO!!! :-))
Il database non avra' una gran mole di dati... io sono un neofita quindi
devo seguire la strada meno complicata. Se mi parli di SQL vado in panico.
Pensavo di risolvere con l'ausilio delle macro e dei "wizard"... oppure
convertendo tutte le caselle di testo dei miei controlli in caselle
combinate ma se lo faccio con una casella combinata aprendo la query
"after.update della casella combinata "il motore di ricerca" funziona... se
imposto after.update alla maschera dopo aver inserito il contenuto in varie
caselle di testo e combinate la query continua a chiedermi il contenuto di
ogni campo e non lo va a leggere nelle caselle di testo....

 wrote in message a19apm$989$1...@nreada.inwind.it...

Eeeehhhhh?!?!
Potresti rispiegare tutto come se lo dicessi ad un bambino di 3 anni?
Non dare per scontato cosa stai facendo, tu lo sai, gli altri no...
Antonio


Vedo che anche tu hai visto il film "Forrest Gump"... :-)
Il problema è semplice: Ho una query che deve estrarre dei record che
rispondono a determinati criteri.  Questi criteri devono essere letti in una
maschera composta da alcune caselle combinate e alcune caselle di testo. Ho
predisposto una macro che esegua la query DOPO che la maschera (nella quale
i controlli non sono collegati a nessuna tabella - ovviamente -) venga
aggiornata. Quindi la macro: 1- aggiorna la maschera (aggiorna oggetto) 2-
esegue la query -3 chiude la maschera.
Il problema è questo: quando viene eseguita la query, invece di leggere il
contenuto dei controlli, me li chiede come se io avessi inserito una
semplice domanda tra parentesi quadre. Come fare per far si che la query
ricerchi i record che soddisfano quanto digitato nei controlli della
maschera?
GRAZIE mille....

 maschera?
Ok, il problema è classico e fose c'è anche un esempio sul sito comune su
qualche voce tipo maschera con criteri di filtro... stai comunque
commettendo degli errori. Prima di tutto il lancio della query non lo devi
fare sull'aggiornamento della maschera (?), ma ti metti un bel pulsante in
modo che quando l'utente è soddisfatto dei suoi parametri, clicca e quindi
parte la query.
Secondo, è la preparazione della query: il modo più elegante è quello di
crearti una stringa SQL corrispondente alla query da eseguire ma in funzione
dei parametri inseriti, cioè mettendo dei criteri solo per i controlli
utilizzati. Questa soluzione si applica anche nel caso non dell'esecuzione
di una query, ma per il lancio di un report filtrato, come mi pare sia il
tuo caso. Infatti, aprendo un report via codice con docmd.openreport c'è la
possibilità di passare dei parametri di filtro. In questo caso quindi la
query origine record del report non deve avere criteri, ma deve restituire
tutto. Poi passi i parametri con questa sintassi (l'help è molto chiaro):
[NOME_CAMPO1] = '" & valore1 & "' and [NOME_CAMPO2] = '" & valore2 & "'"
e così via... chiaramente lo faresti solo per i campi i cui controlli filtro
corrispondenti riportano un valore, non per quelli vuoti.
Se tutto ciò ti fa venire il mal di testa, puoi ovviare con la soluzione che
ti ho detto un po' meno performante. Ti prepari una query che abbia per ogni
campo su cui vuoi filtrare, il criterio
like nz([forms]![tuaform]![controllo1];"*")
in modo che se il controllo è vuoto ti fa like "*"
Questa query la puoi lanciare o usare come origine record del report. In
ogni caso aprirai query o report sempre sul clic del pulsante...
Antonio