Newsgroup: it.comp.appl.access
Titolo: QUERY SEMPLICE ??????

Ciao, ho il seguente problema,
ho una tabella chiamata "InterventiManeVar"  in cui vengono memorizzati
tutti gli interventi di manutenzione e quelli vari effettuati sugli impianti
termici dei clienti.
Insieme agli interventi in questa tabella vengono registrate le date
dell'intervento e la descrizione.
Esempio :
ID Impianto    |    ID Cliente     |  Relazione       |   Note      |
Dataintman   |   Codice
Ora io dovrei riuscire a fare una query parametrica che inserendo il mese e
l'anno dell'intervento di manutenzione  mi dia come risultato tutti quei
clienti che devono ancora effettuarla per il periodo indicato dalla ricerca
parametrica e che non abbiano interventi successivi alla data ricercata
dalla query parametrica.
La query parametrica l'ho già fatta, ma non va bene per ricercare chi deve
ancora fare la manutenzione mentre va bene per vedere uno storico di coloro
che l'hanno fatta nel periodo indicato nei parametri della query.
Esempio :
Cherubini Flavia ha avuto più manutenzioni al suo impianto in date diverse.
Prima manutenzione              12/03/2001
Seconda manutenzione          17/04/2002
Se io inserisco nella ricerca parametrica i seguenti dati :    mese  =  03
anno = 2001
Il risultato per Cherubini Flavia dovrebbe essere nullo (cioè non dovrei
vedere i dati relativi a tale data in quanto l'intervento è stato fatto in
tale  data e successiva).
Per meglio capire : cio' che dovrei ottenere come risulatato è un elenco di
tutti coloro che hanno la data di manutenzione relativa al mese  e anno
cercato e che non abbiano manutenzioni succesive a quella data.
Ricordo che nella tabella sono presenti  più volte gli stessi clienti in
quanto un cliente può avere più impianti.
Riporto di seguito una bozza della tabella:
  InterventiManeVar ID IDimpianto IDCliente relazione note dataintman firma
codice
      502 205 7 R.F. 67/B SOSTITUITO MEMBRANA M3 17/04/2002
     0
      1 205 7 R.F. 64/A PULIZIA 12/03/2001
     1
      2 205 7 R.F. 67/B PULIZIA+PROVA+RAPPORTO 17/04/2002 CHRISTIAN 1
      599 523 8 prova inserimento su michele int man su  michele 31/05/2002
marco  1
      3 434 23 R.F. 56/B PULIZIA 26/04/2001
     1
      627 434 23 R.F. 95/A PULIZIA+PROVA+RAPPORTO 27/05/2002 CHRISTIAN 1
      4 72 29 R.F.93/A PULIZIA 17/04/2001
     1
      5 72 29 R.F.65/E PULIZIA+PROVE+RAPPORTO 28/03/2002 CHRISTIAN 1
      6 77 40 R.F.63/A 1.ACCENSIONE+PROVE 08/03/2001
     1
Spero che qualcuno mi aiuti a risolvere questo che secondo me  dovrebbe
essere una stupidata.
Grazie e ciao.
Email : 
mar...@libero.it

 ha scritto nel messaggio
news:LWR%8.613$lu5....@twister1.libero.it...

Di tutta la tua chiacchierata io ho capito che a te serve creare una query
che ti visualizzi il nome dei tuoi clienti e la descrizione dei loro
impianti per i quali non hai effettuato interventi di manutenzione dopo una
certa data.
Se questo è il tuo problema, io farei così.
Do per scontato che un cliente possa avere più di un impianto per il quale
tu debba fare la manutenzione.
Do per scontato che tu abbia una tabella tblClienti che abbia una struttura
simile a questa:
IDCliente         Contatore e chiave primaria
NomeCliente    Testo
ecc. ecc
Do per scontato che tu abbia una tabella tblImpianti che abbia una struttura
simile:
IDImpianto        Contatore e chiave primaria
DescrImpianto    Testo
IDCliente            Numerico
ecc. ecc.
Queste due tabelle dovrebbero essere tra di loro in relazione uno-a-molti in
base ai campi IDCliente.
Infine hai la tabella InterventiManeVar che ha la seguente struttura:
InterventiManeVarID    Contatore e chiave primaria
IDImpianto                    Numerico
IDCliente                       Numerico
Relazione                       Testo o Memo
Note                              Testo o Memo
Dataintman                     Data/ora
ecc. ecc.
Questa tabella è in relazione uno a molti con la tabella tblImpianti in base
ai campi IDImpianto.
Per prima cosa mi creerei una query di raggruppamento chiamata Query1 e che
abbia il seguente codice SQL:
SELECT InterventiManeVar.IDCliente, InterventiManeVar.IDImpianto,
Max(InterventiManeVar.Dataintman) AS MaxDiDataintman
FROM InterventiManeVar
GROUP BY InterventiManeVar.IDCliente, InterventiManeVar.IDImpianto
HAVING (((Max(InterventiManeVar.Dataintman))>[Digita la data parametro
(gg/mm/aaaa): ]));
Quindi mi creerei una seconda query di selezione chiamata Query2 e che abbia
il seguente codice SQL:
SELECT tblClienti.NomeCliente, tblImpianti.DescrImpianto
FROM tblClienti INNER JOIN (tblImpianti LEFT JOIN Query1 ON
tblImpianti.IDImpianto = Query1.IDImpianto) ON tblClienti.IDCliente =
tblImpianti.IDCliente
WHERE (((Query1.MaxDiDataintman) Is Null));
A questo punto apri Query2 e nella finestra di dialogo digita la data
parametro nella forma gg/mm/aaaa.
Spero che sia ciò che volevi.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:z4W%8.1656$lu5....@twister1.libero.it...


 Innanzi tutto,
Scrivi DOPO il quoting, tagliando le parti non fondamentali invece di
lasciare tutto!!!
Antonio

 ha scritto nel messaggio
news:is609.3564$n04....@twister2.libero.it...


 Grazie molto.
Primo:
chiaramente non hai letto le istruzioni per l'uso postate regolarmente sul
NG, l'ultima volta ieri o l'altro ieri a firma Roberto.
Secondo:
il quoting è la parte di messaggio a cui stai rispondendo e che lasci nella
tua risposta. Si deve scrivere dopo il quoting, o tuttal più in mezzo,
lasciando la parte che può servire a capire la conversazione e togliendo
quanto superfluo.
Per esempio, una tua risposta "grazie" ad un post lungo un botto è
sbagliata, avresti dovuto lasciare magari l'ultima frase e scrverci
grazie... SOTTO....
Antonio

 ha scritto nel messaggio
news:uN609.3609$lu5....@twister1.libero.it...


 ha scritto nel messaggio
news:c5709.3662$lu5....@twister1.libero.it...

scusate per il modo di scrivere, farò più attenzione. Grazie comunque per
l'aiuto e i suggerimenti.
Spero che così sia giusto !!! Mi pare di aver scritto dopo il famoso
quoting.
Ciao a tutti

 quoting.
La posizione era corretta, però avresti dovuto sfoltire molto, come ho fatto
io adesso...
Antonio

 
  Questa query fa pių o meno quel che chiedi (restituisce solo l'ID dei 
clienti, poi te lo gestirai come vuoi...):
SELECT DISTINCT [InterventiManeVar].IDCliente
FROM InterventiManeVar
WHERE NOT ((Month(Data)>=[Mese]) AND (Year(Data)>=[Anno]));
  Ciao.
----------------------------------------------
http://digilander.iol.it/winses
----------------------------------------------

 Grazie veramente tanto.
--



[CUT]
Ma questo non mi sembra essere il problema che abbiamo discusso prima: in
quello si cercava i clienti che non avevano avuto manutenzione.
Per darti una ipotesi del comportamento della query che tu ritieni non
corretto, dovresti almeno postare il codice SQL della query.


 Roberto
Scusa roberto,
forse non ci siamo capiti e quindi mi rispiego.
Io ho le seguenti tabelle :
  Clienti IDCliente NomeSoc IndirizzSoc Cittàsoc Provsoc Capsoc Pivasoc Abi
Cab Banca Modalpag Codfiscsoc Tel1soc Tel2soc Cellulare Faxsoc Numverdesoc
NomeCognomereferente Telefonoref Emailsoc httpsoc Note Indicazionistradali
      1 ABATE IVANO KRMC4 CAV. DI VITT. VENETO 15 CAV. DI VITT. VENETO
LONATO BS 25013
     555555 0
     MAN.08.10.01 R.F.284/B CONTR.170 C.242/98*** NomeCognomeContatto--> ***
      2 ALESSANDRINI MARIACLAUDIA 3700.27 GASOLIO 1 .RG1 VIA MONTE 71 VIA
MONTE PADENGHE BS 25080
     5555555 0
     MAN.20.06.01/P R.F.110/A contr. 265 C.374/98*** NomeCognomeContatto-->
***
  Impianto termico idimpiantotermico idcliente costruttore generatore di
calore Modello gen cal Matricola gen cal a muro a terra acqua aria soffiato
atmosferico altrofluido altrobruciatore combustibile naturale forzato
potenza nominale rendimento utile a potenza nominale percent estremi di
certificazione costrutt bruciatore modello bruc matricola bruc potenza bruc
min potenza bruc max camino individuale camino collettivo scarico a parete
custrutt reg clim modello reg clim num ore prog su 24 prog settimanale prog
mensile percent install elem corpi scaldanti descrizione del sistema diretta
indiretta superficie apertura cm2 ventilatore areazione locali portata in
m3h costrutt pompe modello pompe matricola pompe potenz pompe
Portatam3hpompe prevalenzakpapomp dataaccensbruc dataaccensgen
codicegeneratore codicebruciatore note generatore note bruciatore
dataultimint dataultimman
      434 1 RBL SPA 2000 20 KIS 2149526 Sì No Sì No No Sì
     METANO No Sì 23,3
     No No No PERRY ELETTRONIC 0 No No
     No No 1600 No 0
      72 2 RBL SPA 2KRCT5 71344 No Sì Sì No Sì No
     METANO Sì No 27.200
     RBL SPA RIELLO 40.5
     No No No IMIT TAR
     No No
     No No 2400 No
      77 2 RBL SPA 2KRCT5/1 4924292 No Sì Sì No Sì No
     METANO Sì No 34,8
     No No No
     CRONOTERMOSTATO
     No No
     No No 600 No
      127 1 RBL SPA KRMC4I 4034130 No Sì Sì No No Sì
     METANO Sì No 31,39
     No No No
     No No
     No No 500 No
  InterventiManeVar ID IDimpianto IDCliente relazione note dataintman firma
codice
      1 205 1 R.F. 64/A PULIZIA 12/03/2001
     1
      2 205 2 R.F. 67/B PULIZIA+PROVA+RAPPORTO 17/04/2002 CHRISTIAN 1
      3 434 1 R.F. 56/B PULIZIA 26/04/2001
     0
La query parametrica che dovrei modificare è la seguente :
(attualmente questa query che viene eseguita cliccando un pulsante
posizionato all'interno di una maschera non assocciata dove passo i
parametri (il nome della maschera è parametri) mi restituisce tutte le voci
per cui ho specificato il relativo parametro.
Fatto sta' che questa query mi deve visualizzare solo i clienti e relativi
impianti su cui non è stato fatto una manutenzione successiva alla data
specificata nei parametri passati alla query.) Ricordo che un cliente puo'
avere diversi impianti identificati dall ' IDIMPIANTO TERMICO per cui la
query mi dovrebbe guadare i singoli impianti e relativi interventi per
capire se su quel specifico impianto sono stati effettutati
manutenzioni/interventi successive alla data specificata. Non mi deve
visualizzare gli interventi fatti prima della data passata alla query
paraetrica.
Inoltre nell'istruzione compare [TipoInt] che è un campo in cui cè il valore
"1" oppure "0"  ---->    (Interventi vari = 0)    (Interventi manutenzione =
1)
Il parametro [TipoInt] viene passato alla query dalla maschera parametri
dove risiede un gruppo opzioni che imposta il valore su 0 oppure 1 in base
alla voce selezionata.
Spero che abbiate capito.  La query in questione che esegue attualmente la
ricerca è la seguente :  (sono accetti consigli o suggerimenti per migliorie
o correzzione errori)
QUERY PARAMETRICOMBUST:
SELECT Clienti.NomeSoc, Clienti.IndirizzSoc, Clienti.Cittàsoc,
Clienti.Tel1soc, [Impianto termico].[Modello gen cal], [Impianto
termico].combustibile, [Impianto riscaldamento].[Numero contratto],
Clienti.IDCliente, InterventiManeVar.dataintman
FROM ((Clienti INNER JOIN InterventiManeVar ON Clienti.IDCliente =
InterventiManeVar.IDCliente) INNER JOIN [Impianto riscaldamento] ON
Clienti.IDCliente = [Impianto riscaldamento].IDCliente) INNER JOIN [Impianto
termico] ON (Clienti.IDCliente = [Impianto termico].idcliente) AND
(InterventiManeVar.IDimpiantotermico = [Impianto termico].idimpiantotermico)
GROUP BY Clienti.NomeSoc, Clienti.IndirizzSoc, Clienti.Cittàsoc,
Clienti.Tel1soc, [Impianto termico].[Modello gen cal], [Impianto
termico].combustibile, [Impianto riscaldamento].[Numero contratto],
Clienti.IDCliente, InterventiManeVar.dataintman, [Impianto
termico].idcliente, InterventiManeVar.codice
HAVING ((([Impianto termico].[Modello gen cal]) Like "*" &
[forms]![parametri]![modellogencal] & "*") AND (([Impianto
termico].combustibile) Like "*" & [forms]![parametri]![combustibile] & "*")
AND ((InterventiManeVar.codice) Like [forms]![parametri]![tipoint]) AND
((DatePart("m",[Dataintman])) Like "*" & [forms]![parametri]![meseint] &
"*") AND ((DatePart("yyyy",[Dataintman])) Like "*" &
[forms]![parametri]![annoint] & "*"));
So che il messaggio è un po' lungo ma almeno mi sono spiegato.
Mentalmente sono entrato in un circolo vizioso e non ce la faccio più a
ragionare. Datemi una mano perfavore.
Grazie GRAZIE.

   Ciao.
Grazie per l'interesse,
provero' ad applicare questo codice che mi dici tu anche se non so se mi
potrā funzionare .
Se qualcuno ha qualche idea mi faccia sapere.
A proposito, come mai non si possono inviare messaggi con allegati qui nel
Newsgroup ?
Ciao.

 Newsgroup ?
Perchè il NG non è della gerarchia binari o binaries dove invece appunto è
possibile farlo...
Antonio


Ciao Roberto,
scusa se ti ho contattato in privato ma era l'unic modo per farti vedere la
struttura delle mie tabelle e farti capire il mio problema.
La soluzione che tu dici di avermi dato, senza voler togliere nulla,
andrebbe bene nel caso io dovessi fare una ricerca senza tante pretese.
Purtroppo la query in questione è una query parametrica e prende i dati (
parametri) da una maschera parametri che non contiene la possibità di
inserimento del giorno , ma solo del mese e anno, anche perchè il giorno non
mi occorre.
Oltretutto i risultati ottenuti dalla query non sono proprio corretti in
quanto si ottengono
degli interventi fatti prima della data ricercata e anche successivi .
Ti ringrazio nuovamente .
Ciao.