vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Datenbanken · DAO   |   VB-Versionen: VB4, VB5, VB619.03.02
Eingabe autom. vervollständigen

Ein Beispiel für eine Autovervollständigungs-Funktion für Eingabefelder.

Autor:   Dieter OtterBewertung:  Views:  21.609 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Die "AutoComplete"-Funktion kennt man i.a.R. nur vom Internet-Explorer - genauer gesagt von der Adresszeile, bei der versucht wird, die Eingabe automatisch zu vervollständigen.

Eine solche Funktion lässt sich sehr leicht auch für ein normales Text-Eingabefeld nachbauen, wobei die Inhalte in unserem Beispiel in einer Datenbank gespeichert sind. Nehmen wir an, Sie verwalten eine große Provisionsdatenbank mit sehr vielen Vertretern. Wird ein neuer Auftrag geschrieben, geben Sie in einer Textbox zunächst den Namen des Vertreters ein. Jetzt wäre es doch schön, wenn das Programm bereits während der Eingabe versucht, den Namen zu "erraten", indem es in der Datenbank nach dem bisher eingegebenen Anfangsnamen sucht, und Ihre Eingabe autom. vervollständigt.

Also - worauf warten wir noch

Nehmen wir an, der Name ist in der Datenbank in zwei Feldern gespeichert - "Name" und "Vorname".
Die Eingabe in der TextBox soll hierbei in der Form Name, Vorname erfolgen.

Hier der Code
Im Allgemein-Teil der Form werden die Datenbank-Objektvariablen deklariert:

Option Explicit
 
' Datenbank-Objektvariablen
Private Db As Database
Private Rs As Recordset

Beim Laden der Form öffnen wir die Datenbank und erstellen das Recordset - und zwar als Dynaset, da wir dann eine Suchanfrage bequem über die FindFirst-Methode starten können.

Private Sub Form_Load()
  ' Datenbank öffnen
  Set Db = DBEngine.OpenDatabase(App.Path & "\VERTRETER.MDB")
 
  ' Recordset öffnen (Dynaset)
  Set Rs = Db.OpenRecordset("Vertreter", dbOpenDynaset)
End Sub

Um die Eingabe des Vertreter-Namens automatisch vervollständigen zu können, müssen wir im Change-Event der TextBox nach dem ersten Eintrag suchen, der mit der bisherigen Eingabe übereinstimmt. Wird ein Eintrag gefunden, so vervollständigen wir die bisherige Eingabe und markieren genau diesen Teil der Eingabe, so dass der durch das Programm vervollständigte Rest beim nächsten Tastendruck überschrieben wird - ganz wie unser Vorbild - die Adresszeile des Internet Explorers.

' Eingabe autom. vervollständigen
Private Sub txtVertreter_Change()
  Dim SQL As String
  Dim lPos As Long
  Dim sName As String
  Dim sVorname As String
  Dim sPos As Long
 
  With txtVertreter
    If Trim$(.Text) = "" Or _
      .Tag = "NoAction" Then Exit Sub
 
    ' aktuelle Eingabeposition merken
    sPos = .SelStart
 
    ' Komma vorhanden?
    lPos = InStr(.Text, ",")
    If lPos > 0 Then
      sName = Left$(.Text, lPos - 1)
      sVorname = Trim$(Mid$(.Text, lPos + 1))
    Else
      sName = .Text: sVorname = ""
    End If
 
    ' SQL-Kommando erstellen
    If sVorname = "" Then
      SQL = "Name LIKE '" & sName & "*'"
    Else
      SQL = "Name = '" & sName & "' AND " & _
        "Vorname LIKE '" & sVorname & "*'"
    End If
 
    ' Abfrage!
    Rs.FindFirst SQL
    If Not Rs.NoMatch Then
      ' Eintrag gefunden!
      .Tag = "NoAction"
 
      ' Vollständigen Namen in die TextBox schreiben
      .Text = Rs("Name") & ", " & Rs("Vorname")
 
      ' Eingabe markieren: von der aktuellen 
      ' Eingabeposition bis zum Ende der Eingabe
      .SelStart = sPos
      .SelLength = Len(.Text) - sPos
      .Tag = ""
    End If
  End With
End Sub

Wird die Form geschlossen, schließen wir die Datenbank und setzen die Objektvariablen zurück:

Private Sub Form_Unload(Cancel As Integer)
  ' Datenbank schlißen
  Rs.Close
  Db.Close
 
  Set Rs = Nothing
  Set Db = Nothing
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.