PDA

Vollständige Version anzeigen : Eingabesensitive Default-Werte


Hondo
06.10.2002, 11:48
Hallo,
ich suche nach eine Möglichkeit, um bei einer Eingabe in ein Textformular eine Vorgabe zu erstellen. Bsp. den Namen Maier: Nach Eingabe von Ma sollte der erste übereinstimmende DS als Default angezeigt werden. Glaube das nennt sich Auto-Vervollständigen oder so.
Kann mir jemand Helfen?
Gruß Andreas

MarioR
06.10.2002, 14:16
Hallo Andreas,

so als Sonntagnachmittagidee ;) - probier mal folgenden Code für ein Textfeld:
Private Sub DeinTextfeld_KeyUp(KeyCode As Integer, Shift As Integer)
Dim varVorschlag
Dim lngCursorPos As Long

If KeyCode >= 32 And Not Me.DeinTextfeld.Text = "" Then
varVorschlag = DLookup("Quellfeld", "Quelltab",
"Quellfeld Like '" & Me.DeinTextfeld.Text & "*'")
If Not IsNull(varVorschlag) Then
lngCursorPos = Me.DeinTextfeld.SelStart
Me.DeinTextfeld.Text = varVorschlag
Me.DeinTextfeld.SelStart = lngCursorPos
Me.DeinTextfeld.SelLength = Len(Me.DeinTextfeld.Text)
End If
End If

End Sub

Muss natürlich noch verfeinert werden (reagiert z.B. auch auf Cursortasten).

Hondo
06.10.2002, 14:39
Hallo Mario,
habe inzwischen etwas gebastelt was auch sehr gut funktioniert:

Option Compare Database
Option Explicit
Dim intZaehler As Integer
Dim intCode As Integer

........................
Private Sub Text0_Change()
On Error GoTo Fehler
If IsNull(Text0.text) Or Text0.text = "" Then Exit Sub
If intCode &gt= 65 And intCode &lt= 90 Or intCode &gt= 97 And intCode &lt= 122 Or intCode = 8 Then
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
If Len(Text0.text) = 1 Then intZaehler = 1
Set rs = db.OpenRecordset("Select Nachname From Adressen where [Nachname] Like '" & Left(Text0.text, intZaehler) & "*'", dbOpenDynaset)
If rs.NoMatch Then
Text0.SelStart = intZaehler
Exit Sub
Else
Me!Text0 = rs!nachname
Text0.SelStart = intZaehler
End If
End If

Fehler:
' keine Übereinstimmung gefunden
If Err.Number = 2113 Then
Me!Text0 = Left(Text0.text, intZaehler)
Text0.SelStart = intZaehler
Exit Sub
End If
End Sub

......................
Private Sub Text0_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 8 Then
intZaehler = intZaehler - 1
End If
If KeyCode &gt= 65 And KeyCode &lt= 90 Or KeyCode &gt= 97 And KeyCode &lt= 122 Then
intCode = KeyCode
intZaehler = intZaehler + 1
End If
If intZaehler &lt 0 Then intZaehler = 0
If intZaehler = 0 Then
Me!Text0 = ""
End If
End Sub


Aber Trotzdem Danke
Gruß Andreas