Quisiera saber como localizar un registro y añadir el resto de los campos

Me gustaría que me ayudárais en lo siguiente: tengo una tabla llamada CLIENTES. Cuando voy a dar de alta un nuevo cliente y este no ha sido grabado aún, no hay problema, todo va bien, pero cuando ese cliente ya existe, me gustaría que al teclear el número de móvil que es el campo de búsqueda, me apareciesen el resto de los campos que son: nombre, apellidos y dirección.

1 respuesta

Respuesta
2

En el evento Después de actualizar del cuadro de texto Telefono crea un proc. de evento y entre Private Sub y End Sub pon

If dcount("*","clientes","telefono='" & me.telefono & "'")>=1 then

nombre=dlookup("nombre","clientes","telefono='" & me.telefono & "'")

apellidos=dlookup("apellidos","clientes","telefono='" & me.telefono & "'")

etc

end if

Así, cuando hayas escrito un teléfono contará si ya hay un en la tabla Clientes, si es así te rellenas los cuadros de texto, si no es así, te toca escribir.

Muchísimas gracias, Icue. Funciona perfectamente. Eres un crack.. Voy a abusar de tu generosidad y te hago otra preguntilla si me lo permites.

Me gustaría que en el caso de que el teléfono que tecleo no exista, me genere un registro nuevo para poder completarlo, pero si ya existe, me gustaría que me mostrase los campos (cosa que ya he conseguido con tu ayuda) pero que no me generase un registro nuevo. Es complicado?. Puedes ayudarme? Muchas gracias de nuevo.

Se me olvidó decirte que tengo un botón de comando en el formulario que contiene una macro que te pongo a continuación. Si me aconsejas que haga otra cosa con el botón, estoy a tus órdenes. Es que, antes de la modificación que me has ayudado a hacer, simplemente me avisaba que ya existía un cliente con ese número de teléfono y no me dejaba seguir. Ahora pretendo aprovechar los campos que contiene, si ya existe el cliente, y solo generar un registro nuevo si el cliente no existe. Espero explicarme bien para que me entiendas.

Gracias

Por poder, se pueden hacer muchas cosas. Por ejemplo, supongamos que tienes una tabla Clientes con Idcliente, Nombre, teléfono, dirección, país,...

Podrías, por ejemplo hacer un formulario independiente, con los cuadros de texto Nombre, telefono, direccion, pais( no tienen porque llamarse igual, pero por comodidad) y ponerle un botón de comando, llamado por ejemplo Guardar. Las instrucciones anteriores sirven y en el código del botón, en el evento Al hacer clic puedes poner

Docmd.setwarnings false

docmd.runsql"insert into clientes(nombre,direccion,telefono,pais)values('" & me.nombre & "','" & me.direccion & "','" & me.telefono & "','" & me.pais & "')"

Así, si pones un telefono que existe, instrucciones anteriores, te muestra los valores pero no guarda nada. Si no existe, rellenas los datos, pulsas el botón de guardar y lo pasa a la tabla Clientes.

Aunque, si es un formulario de búsqueda, yo usaría combinados.

De todas formas, si ves que no te queda claro y quieres, repito, si quieres mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Luis Miguel, ya que si no sé quien me escribe no los abro.

Uffff, demasiado complicado para mis pobres conocimientos. Es que igual no me he explicado demasiado bien porque creo que debe ser más fácil, no se.

En mi formulario tengo un botón que se llama REGISTRO NUEVO y cuando lo pulso, con las instrucciones que me diste, consigo que me muestre en pantalla el registro que corresponde a ese número de teléfono si ya ha sido grabado con anterioridad. El problema es que lógicamente me genera un nuevo registro con esos datos existentes y es lo que quiero evitar. Solo quiero que me genere el registro nuevo vacío en el caso de que ese número de telefono no corresponda a ningún cliente, es decir, que no haya sido grabado antes.

Perdona mi torpeza y mi insistencia.

Gracias de nuevo

Por eso, te decía lo del formulario independiente y te ofrecí mi correo.

Gracias de nuevo Icue. He buscado información para hacer el formulario independiente pero no sé cómo hacerlo.

Coges el asistente y haces uno con base en la tabla que sea. Una vez hecho, en vista diseño, en sus propiedades-Datos-Origen del registro lo dejas en blanco. En las propiedades de los cuadros de texto-Datos-Origen del control también lo dejas en blanco, con lo que verás que en los cuadros de texto te pone INDEPENDIENTE. Y ya está

Muchas gracias de nuevo. Voy manos a la obra

Ya lo tengo casi conseguido!!!!

Solo me falta un último empujoncito, el cual te pido.

Mira este es el codigo que he introducido en el botón GUARDAR:

Private Sub Comando29_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into clientes(movil,fijo,nombre,apellidos,poblacion,provincia,dni,fechaalta,equipo,email)values" '&me.nombre&"',"'&me.apellidos&"'","'&poblacion&"',"'&me.provincia&"',"'&me.movil&"',"',&me.fijo&"',"'&me.dni&"',"'&me.email&"')"
End Sub

Me da el error: error de sintaxis en la instrucción INSERT INTO

Tengo la impresión de que no están bien puestas las comillas triples. Puedes decirme como se ponen?.

Espero que sea la última vez que te molesto

Gracias

Hola Icue. Tras muchos intentos, esto es lo último que tengo puesto pero a partir del me.Móvil, me lo pone todo en verde y me dice que el tipo de dato no concuerda. Son todos de tipo texto

DoCmd.RunSQL "insert into clientes(movil,fijo,nombre,apellidos,poblacion,provincia,dni,equipo,email)values('" & Me.movil& '",'"&me.fijo&'",'"&me.nombre&'",'"&me.apellidos&'",'"&me.poblacion&'",'"&me.provincia&'",'"&me.dni&'",'"&me.equipo&'",'"&me.email&'")"

Primero, los campos de destino y de origen no tienen porque llamarse igual, pero sí ser de datos compatibles. O sea, de un campo texto sólo puede ir a un campo texto, de un campo numérico a un campo numérico, etc

Por otro lado, el nombre correcto del control del formulario se escribe

'" & me.nombre & "'

Es decir, un espacio entre & y Me y otro espacio entre e y &

Gracias. Puedes decirme cómo escribir las comillas triples?

DoCmd.RunSQL "insert into clientes(movil,fijo,nombre,apellidos,poblacion,provincia,dni,equipo,email)values('" & Me.movil & '",'" & me.fijo & '",'" & me.nombre & '",'" & me.apellidos & '",'" & me.poblacion & '",'" & me.provincia & '",'" & me.dni & '",'" & me.equipo & '",'" & me.email & '")"

En caso de que no cierre la instrucción es apostrofecomillas espacio & y cierra & comillasapostrofe

En caso de que cerrara una instrucción, por ejemplo

texto8=dlookup("precio","clientes",'" & me.ciudad & "'")

O sea, apostrofecomillas espacio & y cierra & espacio comillasapostrofecomillas

Creo que he hecho lo que me has indicado pero recibo este mensaje de error:

Se ha producido el error 3134 en tiempo de ejecución:

Error de sintaxis en la instrucción INSERT  INTO

Esto es lo que tengo escrito. Podrías por favor decirme si me he equivocado el algo?. Todos los campos que intervienen ahí son de tipo TEXTO.

DoCmd.RunSQL "insert into consulta de clientes(movil,fijo,nombre,apellidos,poblacion,provincia,dni,equipo,email)values('" & Me.movil & "','" & Me.fijo & "','" & Me.nombre & "','" & Me.apellidos & "','" & Me.poblacion & "','" & Me.provincia & "','" & Me.dni & "','" & Me.equipo & "','" & Me.email & "')"

 Gracias otra vez

Esto se está haciendo eterno, cuando a una tabla, consulta, formulario, objeto, control, etc. se le pone nombres separados(soy enemigo acérrimo de ponerlos así) en el código hay que encerrarlo entre corchetes

insert into [consulta de clientes]....

Por un lado corres el riesgo de poner Copia de clientes y te puedes volver loco al ver que el código no funciona pero es que entre Copia y de hay dos espacios y no se nota, pero el código da error y por otro lado lo de los corchetes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas