Newsgroup: it.comp.appl.access
Titolo: Lentezza di dlookup

Che noia!
E' possibile che il dlookup sia una funzione da evitare?
Per estrarre un valore da una query (TOP 5) impiega anche 10/15 secondi
(parlo di un archivio di circa 40.000 record)
Come mi suggerite di procedere per estrapolare il campo A del primo record
di una tabella da codice?
Sapete come va meglio? Usando una mascheda temporanea che prende i dati da
tale tabella e che all'occorrenza viene aperta, preso il valore del CampoA
(via codice) e richiusa.
Possibile?

 wrote in message
news:YF3ae.811291$
b5.35...@news3.tin.it

Certo che č possibile, tutte le funzioni di Aggregamento sui
Domini sono da evitare quando il numero di Records č elevato.
La tecnica da usare č quella del Recordset aperto sulla Query
ma se posti la funzione DLOOKUP che usi posso essere piů
preciso.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:YF3ae.811291$b5.35...@news3.tin.it...

Le funzioni di aggregazione sui dominii come DLookup, specie se usate un una
query, hanno effetti negativi sulla sua performance.
Se non l'hai già fatto, dichiarandoti un indice sul campo che usi sui
criteri della DLookup dovresti ottenere un primo miglioramento.
Un'altra soluzione potrebbe essere quella di eliminare nella query la
DLookup ed usare invece subquery e/o tabelle derivate: insomma invece di
eseguire la DLookup per tutti i 40.000 record della tabella, farlo solo per
i 5 record che ti verranno visualizzati alla fine.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 @Alex
Grazie Alex...
Ecco il problema:
Ho una tabella di 40000 records.
Mi interessa estrapolare l'ultimo codice (IDRecord, contatore, intero lungo)
inserito.
Ho creato una query che ho chiamato "GuardaUltimoRecord" nella quale viene
selezionato solo il campo in questione (IDRecord) ordinato in modo
discendente  e TOP1. In questo modo ho un valore che č l'ultimo IDRecord
della tabella.
Io ho semplicemente scritto
Dim UltimoRecord as Long
UltimoRecord = dlookup("IDRecord","GuardaUltimoRecord")
Grazie per il tuo aiuto.
Ciao

 Ciao
Per me non serve la Query:
'----------- METTILA IN UN MODULO ---------------
Public Function retLast(id as String,strTabella as string) as Long
Dim rs    as DAO.Recordset
Dim sSQL  as String
sSQL="SELECT Max([" & id & "]) As Ultimo From " & strTabella
set rs=CurrentDb.Openrecordset(sSQL,dbreadOnly)
If rs.Eof Then
  retLast=0
Else
  retLast=rs!Ultimo
End if
rs.Close
set rs=Nothing
End Function
'------- NELLA FORM ---------
La chiami cosě:
   Dim UltimoRecord as Long
   UltimoRecord= retLast("IDRecord","NomeTabella")


...
Prima di dbreadOnly manca un altra comma. Adesso si trova
alla posizione del tipo. Ma come dbreadOnly = 4 ed anche
dbOpenSnapshot = 4 hai quasi scritto
set rs=CurrentDb.Openrecordset(sSQL,dbOpenSnapshot)
e in questo senso il codice č giusto di nuovo. ;-)
-- 
cu
Karl
*********
Access FAQ: 
www.donkarl.com/it
 + iscriviti alla prima Conferenza
Italiana per Sviluppatori di Access (CISA 1), Arezzo, 4+5/6/2005 

 @Alex
Grandioso.
Grazie mille.
Sei un grande.
CIao

 Ciao
Grandioso.


 e in questo senso il codice è giusto di nuovo. ;-)
Si hai ragione Karl sono andato a memoria e spesso
fallisce.
In questo caso casualmente andava, ma concordo con
la segnalazione di correzione.
Grazie


 ha scritto nel messaggio
news:eI4ae.811592$b5.35...@news3.tin.it...

Se il problema č questo la cosa piů semplice č usare la funzione DMax (vedi
help):
UltimoRecord = DMax("IDRecord", "NomeTabella")
o in alternativa la funzione DLast (vedi help):
UltimoRecord = DLast("IDRecord", "NomeTabella")
