Newsgroup: it.comp.appl.access
Titolo: DLOOKUP e utilizzo di DATE

Ciao a tutti.
Volevo innanzitutto ringraziare questo NG per le opportunità che
offre.
Vorrei sottoporre un problema che mi sta facendo perdere i capelli.
Ho una tabella (Accisa BSP) dove inserisco dei valori con i relativi
periodi di validità. Per esempio:
ID       DECORRENZA       FINE        IMPORTOACCISA
1             1/1/05             21/2/2005         0,555
2             22/2/05           31/12/9999        0,666
Questa tabella verrà aggiornata ogniqualvolta varierà l'importo.
Successivamente ho creato una query che riprende alcuni campi da
un'altra tabella tra i quali un campo data.
Il campo data si chiama "DATAAct". Nella stessa query vorrei che in
base al campo "DATAAct" mi restituisce il valore "IMPORTOACCISA" di
quel periodo. In poche parole se DATAAct = 10/1/2005 l'IMPORTOACCISA è
0,555, se invece DATAAct = 31/3/05 l'IMPORTOACCISA è 0,666.
Per questo motivo ho utilizzato nella query la funzione DLOOKUP
digitando così:
Accisa: DLookUp("[ImportoAccisa]";"Accisa
BSP";"[DATAAct]>=[Decorrenza] and [DATAAct] <=[Fine]")
Il messaggio di errore mi dice "Impossibile trovare il nome 'DATAAct'
specificato nell'espressione".
Purtoppo non riesco a trovare la soluzione. La costa strana che se
l'espressione è la seguente:
Accisa: DLookUp("[ImportoAccisa]";"Accisa BSP";"Now()>=[Decorrenza]
and Now() <=[Fine]")
il valore restituito è corretto.
CONFIDO in un vostro preziosissimo aiuto.
Grazie

 ha scritto nel messaggio 
news:1178723345.0...@w5g2000hsg.googlegroups.com...









Grazie
guarda su 
ww.donkarl.com/it
ma in sostanza o converti in long o usi #

specificato nell'espressione".
La dlookup non vuole le parentesi quadre.


 - Mostra testo tra virgolette -
Vi ringrazio per i consigli
Con Between non funziona ed inoltre non ho esperienza con VBA pertanto
convertire in long mi risulta alquanto difficile.
Aspetto altri consigli o correzioni nella formula
Grazie

Ulteriori aggiornamenti
Ho modificato l'espressione in:
Accisa: DLookUp("[ImportoAccisa]";"Accisa BSP";"[Accisa BSP]!
[Decorrenza]<=" & [DATAAct] & " And [Accisa BSP]![Fine]>=" &
[DATAAct])
No ho ricevuto alcun messaggio di errore ma la query, però, non mi
restituisce alcun valore.
Come mai??!!!!
(ormai i capelli li ho persi, sigh!!!)

 ha scritto nel messaggio 
news:1178749464.6...@y80g2000hsf.googlegroups.com...
Ulteriori aggiornamenti


Come mai??!!!!

ma hai letto il precedente post di "VT @ home"?
ciao 

 ciao
Forse ho inviato troppe volte il messaggio.
Ho seguito i consigli di VT ma non ho ottenuto alcun risutato.
Inoltre, levando le parentesi quadre non cambia nulla (a meno che non
commetta io degli errori).
Grazie

Come mai??!!!!
non ricevi alcun valore perchè la concatenazione di  [DATAAct] in stringa ha
questo effetto:
Poniamo che [DATAAct] sia uguale a 01/01/2005, la tua espressione diventa:
(ps. ho tolto l'identificatore [Accisa BSP]! perchè non serve.)
----
Accisa: DLookUp("[ImportoAccisa]";"Accisa BSP";"[Decorrenza]<=01/01/2005 And
[Fine]>=01/01/2005")
----
ora, come interpreta Access la condizione [Decorrenza]<=01/01/2005 And
[Fine]>=01/01/2005 ?
Risposta: la interpreta per quello che è, ovvero sviluppa le divisioni , (
01/01/2005 diventa  4.98753117206983E-04) dando come risultato:
[Decorrenza]<=4.98753117206983E-04 And [Fine]>=4.98753117206983E-04
Se trasformiamo il valore 4.98753117206983E-04 in data otteniamo 30/12/1899
0.00.43, ecco perchè non ti rende nessun risultato.
Soluzione: passare la data in modo corretto
----
Accisa: DLookUp("[ImportoAccisa]";"Accisa BSP";"[Decorrenza]<=Cdate('" &
[DATAAct] & "') And [Fine]>=Cdate('" & [DATAAct] & "')")
----
che semplificando ulteriormente diventa
----
Accisa: DLookUp("[ImportoAccisa]";"[Accisa BSP]";"Cdate('" & [DATAAct] & "')
BETWEEN [Decorrenza] And [Fine]")
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 commetta io degli errori).
le parentesi quadre non compreomettono il funzionamento della Dlookup, anzi
sono necessarie quando il nome dei campi hanno caratteri non validi come lo
spazio [Numero Pratica], il simbolo - [Numero-Pratica] ecc.


 La dlookup non vuole le parentesi quadre.
e perchè mai ?
la loro presenza non compromette il funzionamento della Dlookup, anzi, ad
esempio sono necessarie se il nome di un campo ha caratteri non validi come
lo spazio, [Codice Cliente] o il simbolo - [Codice-Cliente] ecc.
:-)


spazio [Numero Pratica], il simbolo - [Numero-Pratica] ecc.
La mia esperienza a riguardo è del tutto diversa:
ogni volta che uso Dlookup o altre funzioni di aggregazione, la
presenza della parentesi quadra fa sì che l'espressione non funzioni
perchè il nome del campo o della tabella non viene riconosciuto.
Nel caso di istruzioni SQL invece, la parentesi quadra è
indispensabile quando il nome della tabella o del campo contiene
caratteri quali - / o spazio.
Come è possibile ?


 Come č possibile ?
non so :-)
Puoi fare un esempio pratico applicabile al Db di esempio NorthWind ?
Cosě lo possiamo verificare.
Come puoi vedere, in questi esempi il nome del campo č sempre racchiuso tra
[]
----
Description of DLookup() usage, examples, and troubleshooting in Access 2000
http://support.microsoft.com/kb/208786/en-us
----


:-)
A parziale rettifica dei miei post precedenti.
Ho fatto alcune prove e devo darti ragione in parte.
Infatti:
- la Dlookup SENZA parentesi quadre funziona anche quando i nomi di
tabella/campo contengono spazio, - o /
- la Dlookup CON le parentesi quadre funziona, anche se ho comunque un
nitido ricordo del fatto che in qualche situazione (purtroppo non
ricordo quale) ho dovuto toglierle per farla funzionare.
E da quel momento in poi infatti, non le ho piů usate.
A meno che il motivo del mancato funzionamento fosse del tutto diverso
ed io abbia l'attribuito erroneamente alla presenza delle parentesi
quadre. E, visto che averle o non averle non fa differenza ...


 quadre. E, visto che averle o non averle non fa differenza ...
:-)


 ha scritto nel messaggionews:1178749464.6...@y80g2000hsf.googlegroups.com...

Non so come ringraziarti. La tua soluzione funziona egregiamente!!!!
Ma perchè specificare il valore con CDate quando il campo DATAAAct ha
già un valore data ben specifico??
Grazie ancora

Grazie ancora
prego,


 ha scritto nel messaggionews:1178791371.5...@e65g2000hsc.googlegroups.com...

Grazie per la chiarissima spiegazione!!
Ciao

:-)
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com/
---------------------------------------------
E quello di it.comp.as400
http://www.faq400.com/
---------------------------------------------

 Pare che abbia perso un'ottima occasione per tacere !
e perchè mai ?
è sempre bene togliersi i dubbi


:-)
Non solo.
E' molto istruttivo dal punto di vista cognitivo, verificare in prima persona i meccanismi (perversi ?) del nostro
cervello.
Infatti, più o meno credo di avere ricostruito quello che mi è successo.
Giovane (mica tanto) ed inesperto (almeno per quanto riguarda Access) circa otto anni fa devo avere incontrato qualche
ostacolo abbastanza ostico nell'utilizzo della Dlookup, probabilmente causato da nomi di tabelle/campi non proprio
ortodossi.
Infatti, riguardando i miei lavori, da un certo punto in poi nei nomi di tabelle/campi sono spariti spazi, trattini e
caratteri diversi dalle lettere dell'alfabeto inglese; l'unica concessione che mi faccio è il carattere underscore.
Della serie, meglio avere paura che buscarne ...
Per qualche strano motivo, in qualche momento delle mie elucubrazioni devo avere imputato la causa del malfunzionamento
alla presenza delle parentesi quadre, tanto è vero che in vecchi lavori ho trovato Dlookup con parentesi quadre, mentre
da un certo punto in poi (più o meno lo stesso che ha segnato l'evoluzione dei nomi di tabelle/campi) le parentesi
quadre sono sparite.
Quindi, probabilmente più o meno nello stesso periodo, devo avere provato come soluzione ai miei problemi sia
l'eliminazione delle parentesi quadre sia l'eliminazione dei caratteri "strani".
E, visto che tutto funzionava, devo avere attribuito il successo all'eliminazione delle parentesi quadre e non all'uso
di nomi più "regolari".
Ed avere mantenuto tale convinzione per tutti questi anni.
Socrate, dopo 2500 anni, ha ancora ragione:  saggio non è colui che sa, ma colui che sa di non sapere ...
