Discussion:
was ist schneller ? seek, findfirst, dlookup ...
(zu alt für eine Antwort)
## Benjamin Adnam ##
2003-10-16 13:57:26 UTC
Permalink
Hallo,

ich habe eine ziemlich komplizierte function geschrieben mit etwa 800 zeilen
code, da kommen aber sicher noch 100 bis 150 dazu

meine frage nun: was ist schneller beim suchen von werten aus tabellen,
abfragen

seek
findfirst
dlookup

und in welcher reihenfolge ist was schneller, also ist seek schneller als
findfirst und findfirst schneller als dlookup ?

und wo finde ich generell informationen bzgl. geschwindigkeit von vba code

wenn ich z.b. auf ein recordset zugreife:

dim db as dao.database
dim rs as dao.recordset

greife ich dann auf die felder besser zu mit

rs!feld

oder besser mit

with rs
.feld
end with

auch hier was ist schneller
--
thnx and regards
Benjamin Adnam
Henry Habermacher [MVP Access]
2003-10-16 14:24:13 UTC
Permalink
Hallo Benjamin
Post by ## Benjamin Adnam ##
meine frage nun: was ist schneller beim suchen von werten aus
tabellen, abfragen
seek
findfirst
dlookup
So einfach lässt sich das nicht beantworten. DLookup() ist wohl immer
langsam.
Was schneller geht, hängt davon ab, wie Du auf die Tabellen zugreifst. Seek
geht IMHO nur, wenn die Tabellen als dbOpenTable geöffnet wurden. Zudem
musst Du über das Feld auch einen Index gelegt haben, IIRC.

Ich bin der Meinung, das schnellste ist immer noch das Recordset so zu
öffnen, dass es gleich den richtigen Datensatz zurückliefert, also eine
Where-Bedingung im Recordset anzugeben.

Was jedoch immer schneller ist als durch die Datensätze zu loopen ist ein
DML Statement, also zB:

Currentdb.Execute "UPDATE DeineTabelle SET DeinFeld=1 WHERE DeinFeld IS
NULL"
ist immer schneller als
Dim db as Database
dim rs as Recordset
set db = currentdb()
set rs = db.openrecordset("SELECT DeinFeld FROM DeineTabelle WHERE DeinFeld
IS NULL", dbOpenDynaset)
If RS.Recordcount > 0 Then
with rs
while not rs.eof
.Edit
!DeinFeld = 1
.Update
.MoveNext
Wend
.Close
End If
End If
set rs = nothing
set db = nothing
Post by ## Benjamin Adnam ##
dim db as dao.database
dim rs as dao.recordset
greife ich dann auf die felder besser zu mit
rs!feld
oder besser mit
with rs
.feld
end with
Die Unterschiede sind marginal. Da schnellste soll sein, direckt auf das
Feld per Index zuzugreifen, also wenn das Feld das 2. Feld ist, dann mit
rs.Fields(1)
oder dann auch per Name auf die Fields Collection
rs.Fields("feld")

Du kannst das ja einfach mal mit einem Loop testen, was in Deiner Situation
das schnellste ist.

Wie gesagt, am schnellsten sind wohl meistens die DML (Data Manipulation
Language) Statements und in den meisten Fällen lassen sich selbst
kompizierte VBA Daten Manipulationsprogramme durch SQL Statements ersetzen,
evt. unter Zuhilfename einer temporären Hilfstabelle.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com/FAQ/FAQStart.htm
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org
Loading...