Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Datensatznavigation / Suche in grossen Tabellen
zurück: SQL-Rezepte weiter: Laufzahlen mal anders (Function) Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
viezy
Access-Programmierer


Verfasst am:
02. Aug 2011, 21:14
Rufname: Ralf
Wohnort: Merzig

Datensatznavigation / Suche in grossen Tabellen - Datensatznavigation / Suche in grossen Tabellen

Nach oben
       Version: (keine Angabe möglich)

Beim Handling grosser Tabellen (um eine Zahl in den Raum zu stellen: > 10000 Datensätze) kostet die Verwendung von Abfragen oder die ausschliessliche Anwendung von .FindFirst oftmals unnötig viel Zeit.
Die folgenden Überlegungen sollen helfen das Laufzeitverhalten der Datenbank beim Umgang mit solchen Tabellen zu verbessern.
  1. Der Primärschlüssel sollte unbedingt numerisch sein!
    Der von Access standardmässig vorgeschlagenen Autowert erfüllt diese Anforderung, ist der vorgegebene Schlüssel alphanumerisch (z.B. ISBN-Nr.) so sollte man versuchen Diesen auf einen Long-Wert eindeutig abzubilden (z.B. durch Ersatz der Zeichen durch ihren ASCII-Code).

  2. Die Tabelle sollte vom Benutzer unbemerkt bei passender Gelegenheit (z.B. gleich beim Programmstart) geladen werden und über die gesamte Sitzung offengehalten werden.
    Code:
    ' in einem Standardmodul
    Public rsBigTable As DAO.Recordset

    'im Start- oder Begrüssungsformular
        DoCmd.Hourglass True
        Application.Echo False
        Set rsBigTable = CurrentDb.OpenRecordset("SELECT *" _
                                                 & " FROM [tblBigTable]" _
                                            & " ORDER BY [ID];", dbOpenDynaset)
        Application.Echo True
        DoCmd.Hourglass False
    Die (aufsteigende) Sortierung nach dem Schlüssel (hier [ID]) ist unabdingbar für das Funktionieren von Tipp 3 !!!

  3. Anstelle der ausschliesslichen Verwendung von .FindFirst suchen wir ausgehend von der aktuellen Position des Datensatzzeigers:
    Code:
    Public Function fnSetPointer(Key As Long) As Boolean
        With rsBigTable
            If .BOF Then
                .FindFirst "[ID] = " & Format(Key)
              ElseIf .EOF Then
                .FindLast "[ID] = " & Format(Key)
              ElseIf ![Id] < Key Then
                .FindNext "[ID] = " & Format(Key)
              ElseIf ![Id] > Key Then
                .FindPrevious "[ID] = " & Format(Key)
            End If
            If Key = ![Id] Then fnSetPointer = True
        End With
    End Function
    Anstelle von
    Code:
        rsBigTable.FindFirst "[ID] = " & Format(lngMyLongNumber)
        If Not rsBigTable.NoMatch Then '...
    reicht uns jetzt folgender Einzeiler
    Code:
        If fnSetPointer(lngMyLongNumber) Then '...
Ich komme mit dieser Vorgehensweise bei einer eingebundenen Tabelle (Backend im LAN) mit 1,2 Millionen Datensätzen (Key ist Long, 2 Integer und ein boolsches Feld) auf Antwortzeiten unter einer Sekunde Exclamation

Viel Spass beim Ausprobieren...

_________________
Access ist eigentlich wie Excel,
nur völlig anders...
Gast



Verfasst am:
03. Aug 2011, 12:08
Rufname:

AW: Datensatznavigation / Suche in grossen Tabellen - AW: Datensatznavigation / Suche in grossen Tabellen

Nach oben
       Version: (keine Angabe möglich)

Rückfragen:
Code:
            .FindFirst "[ID] = " & Format(Key)
Welche Bedeutung hat das Format?

Warum wird die ganze Tabelle in das Recordset geladen statt nur des Feldes ID, wenn man auschließlich mit dem Feld ID arbeitet?

Hinweis: Wenn man die ID´s (könnten dann auch alphanumerisch sein) in ein Dictionary lädt, wäre die Prüfung mit Exists in diesem indizierten Objekt enorm schnell.
viezy
Access-Programmierer


Verfasst am:
03. Aug 2011, 18:21
Rufname: Ralf
Wohnort: Merzig


AW: Datensatznavigation / Suche in grossen Tabellen - AW: Datensatznavigation / Suche in grossen Tabellen

Nach oben
       Version: (keine Angabe möglich)

Hallo,

- ich nutze die Format-Funktion um den numerischen Key in einen String zu casten (CStr ginge ebenso)
- gearbeitet werden soll natürlich mit der Tabelle, bei meinem Post ging es nur um die Positionierung des Datensatzzeigers

Grüsse, Ralf

_________________
Access ist eigentlich wie Excel,
nur völlig anders...
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: aufsummieren 2er tabellen 1 micky1409 1025 17. Jul 2004, 23:43
faßnacht(IT); aufsummieren 2er tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: 2 Tabellen verknüpfen 1 Micky1409 872 08. Jul 2004, 13:12
stpimi 2 Tabellen verknüpfen
Keine neuen Beiträge Access Tabellen & Abfragen: aus zwei Tabellen eine machen 1 mirimaus 2136 30. Jun 2004, 16:30
stpimi aus zwei Tabellen eine machen
Keine neuen Beiträge Access Tabellen & Abfragen: tabellen mit einander verbinden 6 TeeJay 1737 16. Jun 2004, 11:15
TeeJay tabellen mit einander verbinden
Keine neuen Beiträge Access Tabellen & Abfragen: Tabelle mit Beziehung zu anderen Tabellen updaten - wie ? 4 miredoju 2684 15. Jun 2004, 10:24
miredoju Tabelle mit Beziehung zu anderen Tabellen updaten - wie ?
Keine neuen Beiträge Access Tabellen & Abfragen: 2 tabellen vergleichen 4 Lordoo88 1555 03. Jun 2004, 16:43
Lordoo88 2 tabellen vergleichen
Keine neuen Beiträge Access Tabellen & Abfragen: Löschabfrage -> findet Tabellen nicht (GELÖST) 14 DAU 5674 26. Mai 2004, 13:18
DAU Löschabfrage -> findet Tabellen nicht (GELÖST)
Keine neuen Beiträge Access Tabellen & Abfragen: aufklappbare Tabellen 1 Acco 1450 28. Apr 2004, 16:15
KatjaS aufklappbare Tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: Tabellen befüllen lassen 1 Cresito 1049 28. Apr 2004, 09:45
lupos Tabellen befüllen lassen
Keine neuen Beiträge Access Tabellen & Abfragen: Tabellen und Abfragen vor Veränderung schützen. 3 Gast 1549 08. Apr 2004, 09:43
lothi Tabellen und Abfragen vor Veränderung schützen.
Keine neuen Beiträge Access Tabellen & Abfragen: neue Tabellen erstellen aus vorhandener Tabelle 6 moni 2010 29. März 2004, 15:39
moni neue Tabellen erstellen aus vorhandener Tabelle
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage aus zwei Tabellen in einem Formular ohne Unterformul 4 Hippolytus 749 09. März 2004, 15:07
Hippolytus Abfrage aus zwei Tabellen in einem Formular ohne Unterformul
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML Forum