Problema con filtri access 2007

lunedì 21 luglio 2008 - 15.04

Argo983 Profilo | Newbie

Buongiorno a tutti, premetto che sono alle prime armi con access 2007 e che ne so gran poco di linguaggio di programmazione, sto cercando di imparare
ma ho bisogno di risolvere il mio problema al più presto, ho spulciato tutto il forum ma non sono riuscito a trovare una soluzione per me comprensibile...
espongo il mio problema:
Sto creando un database per gestire le visite guidate e le attività didattiche del parco dove lavora un mio amico. Ho creato tutte le tabelle che mi servono
e le relative relazioni e una query (Sattività) che mi "raggruppa" i vari campi delle varie tabelle, poi ho preparato una maschera (Mattività) con i campi
Cguida, Cdata, Cprenotante e un pulsante, poi ho creato un report con gli stessi campi e l'ho associato alla query, il mio desiderio sarebbe quello di inserire
i criteri di ricerca nella maschera e quando clicco sul pulsante mi si aprà il report con il risultato della mia ricerca. Quindi ho aperto le proprietà del report e
nella casella "filtro" ho scritto:

Sattività.guida=Forms!Mattività!CGuida And Sattività.data=Forms!Mattività!Cdata And Sattività.nome=Forms!Mattività!CPrenotante

Il problema è che finchè tutti i campi della maschera contengono un criterio il report mi da dei rislutati ma se, per esempio, inserisco solo la data per
vedere (ed eventualmente stampare) le attività di quel giorno il repot mi resta bianco, anche se in quella data ci sono attività prenotate, lo stesso accade
se, per esempio, inserisco solo il nome della guida per vedere tutte le attività che ha in programma quella persona. Sembra quasi che acces mi legga il
campo vuoto della maschera come un "is null", come posso ovviare al problema? C'è da aggiungere che nella versione finale ci saranno molti più campi per i
cirteri, per ora ne ho messi solo 3 per fare una prova.

Dainesi Profilo | Senior Member

Nella maschera per interrogare i dati (e quindi ottenere il report) inserisci delle checkbox che nascondono/visualizzano il controllo che permette di selezionare/impostare il parametro. Quando poi tu dovrai comporre la stringa di filtro utilizzerai solo i parametri selezionati e valorizzati.

Argo983 Profilo | Newbie

Grazie dell'aiuto, mi potresti fare un esempio così capisco meglio?

aabruzzese Profilo | Junior Member

ciao,

Non e il caso di cambiare da AND a OR ?


Angelo Abruzzese

Argo983 Profilo | Newbie

ma io ho bisogno che mi consideri tutti i criteri che inserisco nei vari campi se metto OR me ne considera solo 1

aabruzzese Profilo | Junior Member


Ai fatto la prova dirrettamente in ACCESS con un SELECT ?

Scusa il Italiano ma si vai a fare un SELECT dove non c'e valore non ti risultano delle righe.


Angelo Abruzzese

valvolino71 Profilo | Newbie

Ciao Argo,
a distanza di qualche anno mi trovo con il tuo stesso problema relativo ai filtri "and" tra i vari campi di una tabella, ma quando il campo è vuoto lo interpreta come un "is null" e quindi risultato ZEROOOOO. ho provato ad usare la funzione IIF, ma nei parametri valori non accetta la funzione NOT"".
Tu hai poi risolto?
Per favore se si, aiutami che sto impazzendo

Dainesi Profilo | Senior Member

Prova a inviare la stringa SQL che vediamo.

.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

valvolino71 Profilo | Newbie

Buongiorno,
Faccio una premessa per capire meglio la struttura del db.
Ho una tabella che si chiama sonde monouso sulla quale è costruita una query parametrica. I parametri della query sono impostati da una maschera ricerca/modifica. Una volta impostati i parametri clicco sul pulsante "cerca" che mi apre una maschera "prodotto" costruita sulla tabella sonda monouso.

Quello che vorrei ottenere è un filtro che se riempo un solo campo della maschera ricerca/modifica, mi selezioni tutti i record della tabella monouso che hanno a comune il valore di quel campo, mentre se ne riempo più di una mi selezioni i record che hanno a comune tutti i parametri, ossia con la funzione AND. Tutti i campi sono di tipo stringa.

Ho seguito due strade:
1. sulla query, in corrispondenza della colonna del campo sui cui effettuo la ricerca e sulla riga "criterio" ho usato la funzione IIF (se il campo è <>""; valore del campo; NOT""), ma ho capito che non posso usare la funzione NOT"" perchè la funzione IIF vuole un valore.
2. Sulla maschera ricerca/modifica ho creato una variabile di appoggio (testo 78) che è uguale al parametro di ricerca se questo è diverso da "" altrimenti ="stringa". Sulla query, sempre nello stesso posto di prima ho usato la funzione NOT(testo (78)). In questo caso funziona il fatto che se non metto nulla in quel parametro la ricerca mi da come risultato tutti i record che hanno a comune l'altro parametro della ricerca (es numero di serie), ma se metto un valore il risultato della ricerca è ovviamente dato da tutti i record che hanno a comune il numero di serie e che NON hanno il parametro che ho indicato nella maschera ricerca/modifica.

Per il momento ho fatto la prova con solo due parametri, ossia numero di serie e numero ddt, gli altri parametri sono tutti in condizione di OR.
Di seguito la stringa Sql del caso 2 e la stringa sql del controllo sulla maschera ricerca/modifica

SELECT DISTINCTROW Sonda_Monouso.[Lotto Sonda], Sonda_Monouso.[Numero serie], Sonda_Monouso.[Cod Cliente], Sonda_Monouso.[Cod Assemblatore], Sonda_Monouso.[Cod Sterilizzatore], Sonda_Monouso.[Reso da Cliente], Sonda_Monouso.Da, Sonda_Monouso.Vs, Sonda_Monouso.[Numero DDT], Sonda_Monouso.[Data DDT], Sonda_Monouso.[Reso ad assemblatore], Sonda_Monouso.TEST
FROM Sonda_Monouso

WHERE (((Sonda_Monouso.[Numero serie])=[Forms]![Ricerca/Modifica]![Testo6]) AND ((Sonda_Monouso.[Numero DDT])<>([Forms]![Ricerca/Modifica]![Testo78])))

OR (((Sonda_Monouso.[Lotto Sonda])=[Forms]![Ricerca/Modifica]![Testo0])) OR (((Sonda_Monouso.[Cod Assemblatore])=[Forms]![Ricerca/Modifica]![CasellaCombinata27])) OR (((Sonda_Monouso.[Cod Cliente])=[Forms]![Ricerca/Modifica]![CasellaCombinata25])) OR (((Sonda_Monouso.[Cod Sterilizzatore])=[Forms]![Ricerca/Modifica]![CasellaCombinata29])) OR (((Sonda_Monouso.[Numero serie])>=[Forms]![Ricerca/Modifica]![Testo42] And (Sonda_Monouso.[Numero serie])<=[Forms]![Ricerca/Modifica]![Testo46])) OR (((Sonda_Monouso.[Lotto Sonda])>=[Forms]![Ricerca/Modifica]![Testo51] And (Sonda_Monouso.[Lotto Sonda])<=[Forms]![Ricerca/Modifica]![Testo53])) OR (((Sonda_Monouso.Da)=[Forms]![Ricerca/Modifica]![CasellaCombinata70])) OR (((Sonda_Monouso.[Data DDT])=[Forms]![Ricerca/Modifica]![Data DDT])) OR (((Sonda_Monouso.Vs)=[Forms]![Ricerca/Modifica]![CasellaCombinata72]))
ORDER BY Sonda_Monouso.[Lotto Sonda], Sonda_Monouso.[Numero serie];


=IIf([Numero DDT]<>"";[Numero DDT];"stringa")

PS. Il primo approccio ad access l'ho avuto 10 gg fa...scusami se ci sono fesserie mega
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5