Newsgroup: it.comp.appl.access
Titolo: Sintassi Query -

Chiedo scusa, non trovo soluzione ad un picolo problema credo solo di
sintassi.
Premessa: 
so che il db non è "pulito" nè molto "logico", ma è  di una
associazione di volontariato me lo sono trovato così, le operatrici
non vogliono cambiamenti eccessivi e devo metterci mano...
Ho una tabella in cui c'è una serie di campi testo il cui nome
corrisponde agli anni. 
Es:
cod_socio
cognome
...
... 
2003
2004
2005
2006
2007
2008
...
Questi campi vengono valorizzati con un una data che indica quando è
stata pagata la quota annuale.
Es: "20/10/2006"
Devo valorizzare un flag sulla base della ricerca di tutti i soci che
abbiano pagato almeno una delle quote degli ultimi tre anni. In
pratica faccio una query di aggiornamento che pone a -1 il flag con la
condizione: [2005] Or [2006] Or [2007] Is Not Null. 
Così mi funziona.
Quello che vorrei è "automatizzare" questa query e ho pensato di una
cosa come:
[Right(Date();4)-3] Or [Right(Date();4)-2] Or [Right(Date();4)-1]
ma non me lo prende.
Ho provato tutti i caratteri speciali e virgolette che la mia tastiera
è in grado di produrre, cercato sul sito comune e sull'help ma non ho
trovato soluzione.
Sperando di essere stato chiaro e sintetico, ringrazio fin d'ora chi
vorrà aiutarmi
Sandro Berardi


Non ti basta verificare se esiste un Record in cui la data è maggiore
di ANNO-3...?
In ogni caso quello che vuoi è da capire dove metterlo...
Normalmente il tuo FLAG credo vada messo nella tabella lato 1
dell'utente e non lato molti(quella con i versamenti)...!
Quindi spero tu abbia le idee chiare....
In ogni caso se l'utente ha fatto un versamento negli ultimi 3 anni
corrisponde a controllare quanti ne ha fatti...
SELECT COUNT(*) As NumVersam
FROM T2
WHERE (Year(Now())-Year(DataVersamento))<3
A questo punto come ti dicevo prima però il FLAG non andrebbe messo
sulla tabella dei versamenti ma su quella del'utente...
Quindi :
UPDTATE T1
SET Pagato=-1
WHERE IdUtente IN ( SELECT IdUtente
                    FROM T2
                    WHERE (Year(Now())-Year(DataVersamento))<3)
Ciao



Grazie ma temo di essermi spiegato male.
Dato che la query funziona  con la condizione "scritta" :
[2005] Or [2006] Or [2007] Is not null, 
una volta che ottengo ad esempio "2005" con le funzioni di Access
(Year(Now())-3) è possibile indicare alla query che la stringa stessa
ottenuta è un nome di campo?
Cioè quello che mi occorre è semplicemente sostituire, nella query,
[2005] con (Year(Now())-3) in modo che la query funzioni
automaticamente ogni anno senza dover aggiornare i campi sulla query.
Forse le funzioni Year() e Now() restituiscono date e quindi devo
trasformarle in testo? E come indicare alla query che quel testo
corrisponde al nome del campo della tabella?
Grazie ancora, Sandro


Non hai nemmeno provato quello che ti ho suggerito....????????????
Il campo Anno deve essere un Numero, se hai usato Testo hai sbagliato.
Se hai già il campo Anno separato dalla Data(cosa direi assurda in
quanto non ha senso replicare un'informazione già contenuta nella data
completa... ma possibile)... non devi fare riferimento a
Year(DataVersamento) ma direttamente al campo anno.
Quello che ti ho suggerito non richiede modifiche in quanto verifica
ogni anno i 3 anni precedenti... cerca di capirlo e provarlo.
Leggere l'help e fare qualche prova nella finestra immediata di cosa
restituisce Year(Now()) non ti espone a rischi influenzali....
@Alex

 wrote:

Grazie.
Devo essere sincero, non mi è molto chiaro il tuo consiglio. Proverò a
capirlo. 
PS
Non è sempre vero che uno non voglia studiare/applicarsi o non faccia
tentativi: a volte mancano gli "strumenti": magari uno gira, rigira
prova e riprova sulla base delle sue conoscenze, magari scarse o
incomplete!
Grazie ancora