Autocompletar campos seleccionando un cliente en Formulario

Tengo este formulario que se alimenta de la tabla "Taller". Me gustaría que al seleccionar el cliente en el combinado para buscar "Cliente", me autocompletara los campos de teléfono y mail.

Creo que debe ser algo como hacer un evento after update del campo "Cliente" para que llene el campo teléfono con el valor correspondiente. Tipo select... Where cliente= cliente seleccionado.

(Adjunto imagen)

2 Respuestas

Respuesta
2

Sergi: De entre otras soluciones, puedes alimentar el Combo con los Datos de Teléfono y email, en su Origen de fila.

Después, en el Evento AfterUpdate del combo, pones, esta estructura, cambiando los nombres de Objetos y números de columnas del Combo.

Me.Telefono = Me.NombreDeTuCombo.Column(X)

Me.EMail = Me.NombreDeTuCombo.Column(Y)

Otra solución es que los formules directo con DLookUp(...

Mis saludos >> Jacinto

Ui! Me acabo de dar cuenta que me falta algo en medio de todo esto...

Adjunto relaciones

Vamos a ver: La tabla "Taller" coge el nombre de cliente de la tabla "Clients" y por lo tanto me muestra un cuadro de selección que me permite escribir o seleccionar "Pepito Perez..." pero la tabla "Taller" no me llena los campos de teléfono, mail... necesarios para generar el "parte de taller"

Así pues, ¿cómo hago para que la tabla "Taller" se alimente de esos campos de la tabla "Cliente" haciendo que al elegir el nombre se complete el teléfono y el mail de ese cliente? ¿Y para que me salga como te pedía en el formulario?

Gracias

Sergi: He visto la respuesta y la aclaración que te hace Icue, y la verdad es que aparte de eso poco puedo aportar. Mis saludos >> Jacinto

Respuesta
2

No se si la base la tendrás hecha así. Por si no la tuvieras te aconsejaría que crees una tabla Clientes, con los datos que nunca cambian en un Cliente como IdCliente, Nombre, DNI, dirección, teléfono, etc. Y otra tabla Taller(ya que un cliente puede ir varias veces al taller)relacionadas, por ejemplo, por Idcliente.

Entonces haces el combinado poniendo en Origen de la fila (como podría darse el caso de que dos clientes se llamaran igual)

Select idcliente, nombre from clientesclientes;

En columna dependiente ponle 1, en numero de columnas 2 y en ancho de las columnas 0;4

Y en sus propiedades-Eventos-Después de actualizar ya puedes poner

dirección=dlookup("dirección","clientes","idcliente='" & me.nombre del combinado & "'")

Los demás igual

Pero yo pondría estos cuadros de texto como independientes, o sea, no los pondría en la tabla Taller, ya que teniendo el Idcliente ya tienes todos sus datos, y así te evitas tener datos repetidos en diferentes tablas.

Nombre del combinado es el que aparece en sus propiedades-otras-nombre

Icue

Te sigo pero "a medias"

Te respondo entre líneas:

"No se si la base la tendrás hecha así. Por si no la tuvieras te aconsejaría que crees una tabla Clientes, con los datos que nunca cambian en un Cliente como IdCliente, Nombre, DNI, dirección, teléfono, etc. Y otra tabla Taller(ya que un cliente puede ir varias veces al taller)relacionadas, por ejemplo, por Idcliente." HECHO (Hasta ahí si que llego :)

Entonces haces el combinado poniendo en Origen de la fila (como podría darse el caso de que dos clientes se llamaran igual) Creo que con el asistente ya queda bien. Esto es lo que me ha puesto: SELECT [Clientes].[Num Client], [Clientes].[Cliente] FROM [Clientes] ORDER BY [Cliente];

Select idcliente, nombre from clientesclientes;  Creo que es lo mismo que tengo aunque en mi codigo le ponen el group by;

En columna dependiente ponle 1, ya esta en 1 en numero de columnas 2

Y en ancho de las columnas 0;4

A PARTIR DE AQUÍ ME PIERDO...

Y en sus propiedades-Eventos-Después de actualizar ya puedes poner (¿EN EL CAMPO NOMBRE Y LO Mismo para Móvil y Fijo y e-mail?)

Como queda el código por ejemplo para "Movil"

Private Sub ClienteCombinado_AfterUpdate()
Movil = DLookup("Movil", "clientes", "idcliente='" & Me.ClienteCombinado & "'")
End Sub
dirección=dlookup("dirección","clientes","idcliente='" & me.nombre del combinado & "'")

Los demás igual

Pero yo pondría estos cuadros de texto como independientes, o sea, no los pondría en la tabla Taller, ya que teniendo el Idcliente ya tienes todos sus datos, y así te evitas tener datos repetidos en diferentes tablas. Esto creo que lo entiendo

Nombre del combinado es el que aparece en sus propiedades-otras-nombre esto también lo entiendo

Gracias

Vamos por partes. Si en el origen de la fila del combinado usas la propia tabla Taller, lógicamente tendrás que agruparlo ya que si un cliente ha ido tres veces al taller, en el combinado su nombre te aparecería tres veces. Por eso te dije que es mejor usar la tabla Clientes que sólo aparecerá una vez.

Me refería a que en las propiedades del combinado, en la solapa Otras te aparece el Nombre del control, que no tiene porque ser igual que el origen del control

Y como la columna dependiente( la que importa) es la 1 y ahí aparece (aunque no se vea) NumClient

Por tanto el código debería ser

Private Sub ClienteCombinado_AfterUpdate()
Movil = DLookup("Movil", "clientes", "Numclient='" & Me.ClienteCombinado & "'")
End Sub

Algo no me "cuadra"

Le pego este codigo al after update del cuadro combinado Nombre que tiene el select directamente de la Tabla Cliente => SELECT [Clientes].[Num Client], [Clientes].[Cliente] FROM Clientes ORDER BY [Cliente]; 

Este és el codigo que le pego en el after update:

Private Sub ClienteCombinado_AfterUpdate()
Movil = DLookup("Movil", "clientes", "[Num Client]='" & Me.ClienteCombinado & "'")
End Sub

-Duda:  el campo Num Client va entre corchetes [ ] ?

Me da error:


Emmarco los cuadros Movil, fijo y e-mail que quiero que se me rellenen al seleccionar el nombre del combo ClienteCombinado donde dice "Alexis"

¿Que hago mal?

Gracias

Chicos...  No me funciona...

Podemos ir paso a paso?

Sigo probando...¿esta bien escrito así? ¿Num Cliente aunque esté separado?

Private Sub ClienteCombinado_AfterUpdate()

Mov = DLookup("Movil", "Clientes", "Num Cliente=" & Clientes.Value)
Fij = DLookup("Fijo", "Clientes", "Num Cliente=" & Clientes.Value)
Mail = DLookup("Mail", "Clientes", "Num Cliente=" & Clientes.Value)

End Sub

Yo siempre aconsejo que cuando se pongan nombres de campos en tablas, en controles de formulario, informes, etc., se pongas todo junto, por ejemplo NombreCliente, TelMovil,,,, por

1º Cuando escribes en código, si el nombre está separado tienes que encerrarlo entre corchetes

2º Como cometas un error y pongas a un campo o control, nombre cliente, te puedes volver loco, en el código, porque si lo miras verás que entre nombre y cliente hay dos espacios y VB lo entiende como dos dígitos, y venga a darte error y lo que menos piensas es que va con doble espacio.

De todas formas, si quieres, repitos, si quieres, mándame las tablas vacías a [email protected] y te hago el formulario, o no me mandes nada, simplemente un mensaje y te mando un ejemplo. En ambos casos, si lo haces, en el asunto del mensaje pon tu alias Sergi, ya que si no sé quien me escribe ni los abro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas