2012-08-16 27 views
5

W programie Access mam formularz, w którym znajdują się trzy pola tekstowe. Próbuję zaktualizować pole tekstowe o nazwie tbxCombinedName z kombinacją obu:Zaktualizuj pole tekstowe podczas pisania

  • textbox tbxLastName (osoby Nazwisko)
  • tekstowe tbxFirstName (osoby Imię)

Moje pytanie brzmi: z jakiej właściwości pola tekstowego używam, tak że podczas wpisywania tekstu w polu tbxLastName pole tekstowe CombinedName jest zaktualizowano natychmiast, a następnie zapisano w tabeli Kontakty.

Na Microsoft's website, znalazłem, że procesy krok po wpisywać w polu tekstowym są następujące:

KeyDown → KeyPress → BeforeInsert → Zmień → KeyUp

Próbowałem za pomocą onChange i Właściwości OnKeyDown, ale bez skutku. Która właściwość w połączeniu z jakim kodem pozwoli na działanie akcji aktualizacji, kiedy chcesz?

To co napisałem wcześniej, co nie działa:

Private Sub tbxLName_change() 

Dim lastName As String 
Dim nameCode As String 

lastName = tbxLName.Value 
Debug.Print lastName 
nameCode = tbxNameCode.Value 
nameCode = lastName 
Debug.Print nameCode 

End Sub 

Dzięki za pomoc z góry.

Odpowiedz

6

Jest to jeden z nielicznych przypadków, w których należy odwołać się do właściwości .text.

w zmianie imprezy:

lastName = tbxLName.Text 

Obiekt .text jest dostępna tylko wtedy, gdy kontrola ma skupić i to odnosi się do widocznych treści kontrolą.

Jest to jednak baza danych, a ogólną zasadą jest, że nie zapisuje się pól obliczeniowych. Pełną nazwę można łatwo uzyskać z zapytania.

+0

prosta odpowiedź, ale działa doskonale. Dziękujemy –

+1

+1 Dobra rada w sprawie uzyskania żądanych informacji z zapytania –

+0

Czy zapytanie może przetwarzać imię i nazwisko w tym formacie: 'LLLLLL_F'? (LLLLLL to pierwsze 6 liter nazwiska, F to pierwsza litera imienia) –

1

Zaledwie kilka notatek:

Możesz iść z KeyPress ponieważ zapewnia możliwość zmiany lub negować kluczem użytkownik popchnął.

W poniższym przykładzie, tylko litery są dozwolone i małe litery są obudowane górna:

Private Sub tbxLName_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
     Const ASCII_LOWER_RANGE = 65 
     Const ASCII_UPPER_RANGE = 122 
     Const ASCII_LOWER_A = 97 
     Const ASCII_LOWER_Z = 122 
     Const UPPER_MODIFIER = -32 
     Const ASCII_CANCEL_CODE = 0 

     Select Case KeyAscii 
      Case ASCII_LOWER_RANGE To ASCII_UPPER_RANGE 
       If KeyAscii >= ASCII_LOWER_A And KeyAscii <= ASCII_LOWER_Z Then 
        KeyAscii = KeyAscii + UPPER_MODIFIER 
       End If 
      Case Else 
       KeyAscii = ASCII_CANCEL_CODE 'Cancel Key Press 
     End Select 
End Sub 
+0

ray023 To nie jest to samo' lastName = tbxLName.Text'. Domyślna właściwość to '.value' i nie jest tożsama z' .text' w MS Access. Właściwość '.text' jest ** only ** dostępna, gdy kontrola ma fokus. – Fionnuala

+0

@Remou Jedna z tych subtelnych różnic VB6/VBA? Po prostu usunę tę część. Dzięki, że dałeś mi znać. – ray