Wenn das Kombifeld zu viele Daten hat
Du klickst ins Formular – und Access friert kurz ein.
Weil das Kombinationsfeld 10.000 Datensätze lädt.
Das will keiner.
Die Lösung: Lazy Loading.
Also: Erst Daten holen, wenn der Benutzer wirklich sucht.
Mein Ansatz: Kombifeld mit RowSource on demand
- Leere RowSource beim Start
- Beim Tippen Daten nachladen
- Optional mit Mindestanzahl Zeichen
- Optional mit SQL Server per Pass-Through
Beispiel 1: Dynamisches Nachladen bei Eingabe
Private Sub cboKunde_Change()
Dim sSQL As String
Dim sSuche As String
sSuche = Me.cboKunde.Text
If Len(sSuche) < 3 Then
Exit Sub
End If
sSQL = "SELECT KundenID, Name FROM Kunden " & _
"WHERE Name LIKE '" & Replace(sSuche, "'", "''") & "%' " & _
"ORDER BY Name"
Me.cboKunde.RowSource = sSQL
Me.cboKunde.Dropdown
End Sub
Beim Tippen ab 3 Zeichen wird die Liste geladen.
Kein voller Datensatzbestand. Kein Hänger.
Beispiel 2: Kombifeld leer initialisieren
Private Sub Form_Load()
Me.cboKunde.RowSource = "SELECT KundenID, Name FROM Kunden WHERE 1=0"
End Sub
Damit bleibt das Feld leer bis zur ersten Eingabe.
Sieht sauber aus. Reagiert schnell.
Beispiel 3: Mit SQL Server – per Pass-Through
Function LadeKundenSuche(sSuche As String) As String
Dim qd As DAO.QueryDef
On Error Resume Next
CurrentDb.QueryDefs.Delete "pt_KundenSuche"
On Error GoTo 0
Set qd = CurrentDb.CreateQueryDef("pt_KundenSuche")
qd.Connect = "ODBC;DSN=SQLServerDSN;"
qd.ReturnsRecords = True
qd.SQL = "SELECT KundenID, Name FROM dbo.Kunden " & _
"WHERE Name LIKE '" & Replace(sSuche, "'", "''") & "%' " & _
"ORDER BY Name"
LadeKundenSuche = "pt_KundenSuche"
End Function
Private Sub cboKunde_Change()
If Len(Me.cboKunde.Text) < 3 Then Exit Sub
Me.cboKunde.RowSource = LadeKundenSuche(Me.cboKunde.Text)
Me.cboKunde.Dropdown
End Sub
Mit Pass-Through wird die Abfrage direkt auf dem Server ausgeführt.
Kein lokaler Overhead.
Tipps zur Performance
LIKE 'xyz%'
nutzt Index –LIKE '%xyz%'
nicht- Nicht auf Views mit Joins – lieber gezielt auf Basis-Tabelle
- Nur
TOP 100
laden bei vielen Treffern ColumnWidths
setzen, damit Dropdown flott bleibt
Me.cboKunde.ColumnWidths = "0cm;5cm"
Tabelle: Lazy Loading vs. Standard
Eigenschaft | Standard-Kombifeld | Lazy Loading Kombifeld |
---|---|---|
Ladezeit beim Öffnen | Langsam bei großen Daten | Schnell, da leer |
Speicherverbrauch | Hoch | Niedrig |
Benutzerfreundlichkeit | Unübersichtlich | Zielgerichtet |
Komplexität | Einfach | Höher, aber steuerbar |
Lazy läuft
Große Kombifelder sind wie Excel-Listen auf Papier.
Am Anfang meint man, man braucht alles.
Am Ende reicht ein Filter.
Mach’s effizient. Mach’s nutzbar.
Lazy Loading lohnt sich.
No responses yet