2012-08-16 24 views
5

En Access, tengo un formulario en el que hay tres cuadros de texto. Estoy intentando actualizar un cuadro de texto denominado tbxCombinedName con una combinación de ambos:Actualizar cuadro de texto al escribir

  • cuadro de texto tbxLastName (de persona Apellidos)
  • cuadro de texto tbxFirstName (de la persona Nombre)

Mi pregunta es: ¿qué propiedad de cuadro de texto utilizo, de modo que cuando estoy escribiendo texto en tbxLastName, el cuadro de texto CombinedName es actualizado inmediatamente y, posteriormente, guardado en la tabla Contactos.

En Microsoft's website, he encontrado que los procesos de paso al escribir en un cuadro de texto son los siguientes:

KeyDown → → KeyPress BeforeInsert → Cambiar → KeyUp

He intentado usar el AlCambiar y Propiedades OnKeyDown, pero fue en vano. ¿Qué propiedad, combinada con qué código, permitirá que la acción de actualización tal como se realice funcione?

Esto es lo que he escrito antes, que no funcionaba:

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 

Gracias por toda su ayuda de antemano.

Respuesta

6

Este es uno de los pocos casos donde debe consultar la propiedad .text.

En el evento Change:

lastName = tbxLName.Text 

La propiedad .text sólo está disponible cuando un control tiene el foco y se refiere a los contenidos visibles del control.

Sin embargo, esta es una base de datos y la regla general es que no almacena campos calculados. El nombre completo puede obtenerse fácilmente de una consulta.

+0

Una respuesta simple, pero funciona perfectamente. Gracias –

+1

+1 Buenos consejos para obtener la información deseada de una consulta –

+0

¿Puede la consulta procesar el nombre y el apellido en este formato: 'LLLLLL_F'? (LLLLLL son las primeras 6 letras del apellido. F es la primera letra del nombre) –

1

Sólo un par de notas:

Es posible que quiera ir con KeyPress, ya que proporciona la capacidad de cambiar o anular la clave del usuario empujó.

En el siguiente ejemplo, sólo se permiten las letras y las letras minúsculas están entubados superior:

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 Estos no son los mismos' lastName = tbxLName.Text'. La propiedad predeterminada es '.value' y no es lo mismo que' .text' en MS Access. La propiedad '.text' está ** solo ** disponible cuando un control tiene foco. – Fionnuala

+0

@Remou ¿Una de esas sutiles diferencias VB6/VBA? Solo voy a eliminar esa parte. Gracias por hacérmelo saber. – ray

Cuestiones relacionadas