Newsgroup: it.comp.appl.access
Titolo: comportamento Dlast strano

ho creato una query di selezione come di seguito elencata
SELECT tblDettagliMovimentiMagazzino.IDArticolo, 
tblMovimentiMagazzino.DataFattura, tblDettagliMovimentiMagazzino.Quantità, 
tblDettagliMovimentiMagazzino.Importo, tblMovimentiMagazzino.Anno, 
[importo]/[quantità] AS costoultimo, 
tblMovimentiMagazzino.IDMovimentiMagazzino
FROM tblMovimentiMagazzino INNER JOIN tblDettagliMovimentiMagazzino ON 
tblMovimentiMagazzino.IDMovimentiMagazzino = 
tblDettagliMovimentiMagazzino.IDMovimentiMagazzino
WHERE (((tblMovimentiMagazzino.DataFattura)>0) AND 
((tblMovimentiMagazzino.Anno)=2005)) OR 
(((tblMovimentiMagazzino.DataFattura)>0) AND 
((tblMovimentiMagazzino.Anno)=2005))
ORDER BY tblDettagliMovimentiMagazzino.IDArticolo, 
tblMovimentiMagazzino.DataFattura;
uso Dlast in una maschera su evento clic di un pulsante per compilare un 
campo .......
DLast("costoultimo", "qryvaloreultimoacquisto", "idarticolo=207")
Penso che dlast mi dovrebbe ritornare l'ultimo record della query messa in 
ordine crescente per idarticolo e datafattura, senza tenere conto dell'ID 
contatore della tabella iniziale.
Il fatto e proprio questo.......se inserisco un nuovo movimento con data 
inferiore a quelli esistenti, Dlast me lo ritorna come ultimo record anche 
se nella query non lo è affatto......perchè?
Percaso prende in considerazione l ? ID della tabella uno a molti?
In cosa sbaglio
Saluti Massimo

 ha scritto nel messaggio
news:m%pDe.8463$a5.1...@twister2.libero.it...

Mi pare di ricordare che l'access avverte su questo tipo
di problema con Dlast.
Hai provato con Dmax se fa lo stesso problema e se ovviamente
fa al caso tuo?
Altrimenti posso consigliarti di stringere la query ad un record solo
utilizzando la clausola TOP 1 ordinata per ottenere al primo posto il record
interessato.
bye :o)

 ha scritto nel messaggio
news:m%pDe.8463$a5.1...@twister2.libero.it...

Come indicato nell'help DLast fornisce i dati relativi al record inserito in
tabella temporalmente per ultimo tra quelli che soddisfano i criteri della
funzione e se frega di come sono ordinati ordinati i record nella query.
Se vuoi invece il record con la chiave di ordinamento più alta, devi usare
DMax e impostare i criteri di questa funzione nello stesso modo in cui hai
impostato quelli di selezione della query.
Naturalmente se la tabella ha come chiave primaria un contatore, chiaramente
verrà selezionato il record con la chiave primaria maggiore, ma è solo una
coincidenza: DLast restituisce i dati dell'ultimo record inserito in tabella
anche se la chiave primaria non è un contatore.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------


E normale come anomalia o bisogna cambiare qualche riferimento?
Ho controllato bene il funzionamente........tiene conto dell' ID chiave 
della tabella principale


Comunque non mi fiderei troppo, ed userei una query TOP 1.
Come riportato dall'help dell 'A97 copio e incollo.
"Osservazioni
Nota   Se si desidera la restituzione del primo o dell'ultimo record di un
set di record, un dominio, si consiglia di creare una query con ordinamento
crescente o decrescente e impostare a uno la proprietà PrimiValori...."
bye :o)

 ha scritto nel messaggio
news:vsuDe.88655$h5.37...@news3.tin.it...

Onestamento non è detto che con TOP 1 riesci a localizzare quale è l'ultimo
record inserito in tabella: sicuramente con TOP 1 rilevi il primo o l'ultimo
record in base ad una chiave di ordinamento, insomma qiello che faresti con
DMax e DMin che potrebbero dare un valore diverso dalla DLast.
Comunque penso che la soluzione vada personalizzata a seconda dei casi: ad
esempio se la chiave primaria della tabella è un campo di tipo Contatore il
modo più sicuro per localizzare l'ultimo record inserito in tabella è quello
di usare DMax sulla chiave primaria.



Volevo evitare tutta una procedura via codice ma mi sa che č l'unica strada 
percorribile per evitare sbagli accidentali..
Grazie