Newsgroup: it.comp.appl.access
Titolo: Casella combinata di ricerca a catena

Ciao a tutti,
ecco il mio nuovo problema.
Ho una maschera che si chiama Manodopera. Origine dati una query QRicercaManodopera.
In intestazione maschera ho creato 3 caselle combinate di ricerca: Dipendente, Commessa e Periodo.
il mio obiettivo sarebbe quello di filtrare i dati presenti in base ai dati delle caselle combinate, per cui se digito il nome dipendente Pippo, per es., dovrebbe nelle altre due caselle combinate farmi vedere solo le commesse e i periodi in cui a lavorato Pippo e non tutti i periodi e tutte le commesse.
Io ho provato in questo modo, ma funziona solo all'inizio e poi non filtra più nulla:
L'origine riga delle caselle combinate sono così:
 
SELECT "<<TUTTI>>" AS Personale FROM QRicercaManodopera UNION SELECT DISTINCT Personale FROM QRicercaManodopera  GROUP BY Personale ORDER BY Personale;
 
SELECT "<<TUTTI>>" as Commessa FROM QRicercaManodopera UNION SELECT DISTINCT Commessa FROM QRicercaManodopera ORDER BY Commessa;
 
SELECT "<<TUTTI>>" as Commessa FROM QRicercaManodopera UNION SELECT DISTINCT Commessa FROM QRicercaManodopera ORDER BY Commessa;
 
La query QRicercaManodopera è così:
 
SELECT Manodopera.IdManodopera, Personale.Personale, Manodopera.Data, Manodopera.OreLavorate, Manodopera.Commessa, Manodopera.Costo, Manodopera.Trasferta, Manodopera.Note, [OreLavorate]*[Costo] AS CostoGiorno
FROM Personale INNER JOIN Manodopera ON Personale.IdPersonale = Manodopera.IdPersonale
WHERE (((Personale.Personale) Like IIf([Forms]![Manodopera]![RicercaPersonale]="<<TUTTI>>","*",[Forms]![Manodopera]![RicercaPersonale])) AND ((Manodopera.Data) Like IIf([Forms]![Manodopera]![RicercaPeriodo]="<<TUTTI>>","*","*" & [Forms]![Manodopera]![RicercaPeriodo])) AND ((Manodopera.Commessa) Like IIf([Forms]![Manodopera]![RicercaCommessa]="<<TUTTI>>","*",[Forms]![Manodopera]![RicercaCommessa])))
ORDER BY Personale.Personale, Manodopera.Data;
 
Dopo aggiornamento di ogni singola casella combinata ho scritto il comando Me.requery.
 
Dove sto sbagliando?
Grazie a tutti per la collaborazione.
Lo

Il giorno martedì 4 settembre 2012 10:28:58 UTC+2, Lo ha scritto:
 
Così a naso.
Cambia le query in un modo del genere.
 
CasellaCombinata1
SELECT "<<TUTTI>>" AS Personale, 0 AS daCodice, 999999 AS aCodice FROM Manodopera
UNION SELECT DISTINCT Personale, IdManodopera AS daCodice, IdManodopera AS aCodice FROM Manodopera ORDER BY Personale;
 
CasellaCombinata2
SELECT "<<TUTTI>>" AS Commessa, 999999 AS IdManodopera FROM Manodopera
UNION SELECT DISTINCT Commessa, IdManodopera FROM Manodopera
WHERE IdManodopera >= CasellaCombinata1.column(1) AND IdManodopera <= CasellaCombinata1.column(2) ORDER BY Commessa;
 
CasellaCombinata3
SELECT "<<TUTTI>>" AS Periodo, 999999 AS IdManodopera FROM Manodopera
UNION SELECT DISTINCT Periodo, IdManodopera FROM Codice
WHERE IdManodopera >= CasellaCombinata1.column(1) AND IdManodopera <= CasellaCombinata1.column(2) ORDER BY Periodo;
 
Nell'evento DopoAggiornamento di CasellaCombinata1 scrivi:
CasellaCombinata2.requery
CasellaCombinata3.requery
 
In questo modo, se nella prima casella hai selezionato "<<TUTTI>>", nelle altre due dovresti avere tutte le Commesse e Periodi di tutti i dipendenti (da 0 a 999999), in caso contrario solo quelli della IdManodopera che hai scelto.
Se 999999 non basta, ci metti un valore più grande.
 
RB

 Ciao a tutti, ecco il mio nuovo problema. Ho una maschera che si chiama Manodopera. Origine dati una query QRicercaManodopera. In intestazione maschera ho creato 3 caselle combinate di ricerca: Dipendente, Commessa e Periodo. il mio obiettivo sarebbe quello di filtrare i dati presenti in base ai dati delle caselle combinate, per cui se digito il nome dipendente Pippo, per es., dovrebbe nelle altre due caselle combinate farmi vedere solo le commesse e i periodi in cui a lavorato Pippo e non tutti i periodi e tutte le commesse. Io ho provato in questo modo, ma funziona solo all'inizio e poi non filtra più nulla: L'origine riga delle caselle combinate sono così: SELECT "<<TUTTI>>" AS Personale FROM QRicercaManodopera UNION SELECT DISTINCT Personale FROM QRicercaManodopera GROUP BY Personale ORDER BY Personale; SELECT "<<TUTTI>>" as Commessa FROM QRicercaManodopera UNION SELECT DISTINCT Commessa FROM QRicercaManodopera ORDER BY Commessa; SELECT "<<TUTTI>>" as Commessa FROM QRicercaManodopera UNION SELECT DISTINCT Commessa FROM QRicercaManodopera ORDER BY Commessa; La query QRicercaManodopera è così: SELECT Manodopera.IdManodopera, Personale.Personale, Manodopera.Data, Manodopera.OreLavorate, Manodopera.Commessa, Manodopera.Costo, Manodopera.Trasferta, Manodopera.Note, [OreLavorate]*[Costo] AS CostoGiorno FROM Personale INNER JOIN Manodopera ON Personale.IdPersonale = Manodopera.IdPersonale WHERE (((Personale.Personale) Like IIf([Forms]![Manodopera]![RicercaPersonale]="<<TUTTI>>","*",[Forms]![Manodopera]![RicercaPersonale])) AND ((Manodopera.Data) Like IIf([Forms]![Manodopera]![RicercaPeriodo]="<<TUTTI>>","*","*" & [Forms]![Manodopera]![RicercaPeriodo])) AND ((Manodopera.Commessa) Like IIf([Forms]![Manodopera]![RicercaCommessa]="<<TUTTI>>","*",[Forms]![Manodopera]![RicercaCommessa]))) ORDER BY Personale.Personale, Manodopera.Data; Dopo aggiornamento di ogni singola casella combinata ho scritto il comando Me.requery. Dove sto sbagliando? Grazie a tutti per la collaborazione. Lo
 
Ok Grazie sono riuscita aggiungendo solo la requery sulle caselle combinate e modificando l'origine dati del periodo da Manodopera a QRicercaManodopera.
 
Grazie dell'aiuto.
Lo