Cargar datos de un registro desde un ComboBox y generar un nuevo registro a partir del mismo

Tengo un formulario (FRCapa) de capacitaciones, asociado a una tabla
(TRCapa) en la que se guardan todos los datos del formulario. Necesito
su ayuda para que al generar un nuevo registro y comenzar a escribir el
nombre de la persona que se va a ingresar, se organice un
listado a partir de la tabla TRCapa con los datos de las personas que ya se
encuentran registradas cuyos nombres inicien con las letras digitadas, y
1. Si existe un registro de esa persona, cuando el operador seleccione su
nombre, se cargue la información de esta persona en el nuevo registro.
2. Si no existe ningún registro de esa persona en la base de datos, permitir agregar datos al nuevo registro.

1 Respuesta

Respuesta
1

Lo que necesitas es un poquito complicado y son necesarios conocimientos de VBA. Si más o menos conoces VBA, te puedo orientar o incluso resolverte el problema. Si no sabes nada de VBA, sólo puedo recomendarte que comiences a aprenderlo antes de andarte con cosas así complicadas (VBA es muy sencillo... largo, pero sencillo). Ya me dirás.

Gracias por tu pronta respuesta. Mis conocimientos de VB no son grandes pero me puedo defender. Probemos, a lo mejor con tu ayuda lo resuelvo.

Saludos

Ok, vamos con ello pues :)

En el diseñador de formularios...

Lo primero es añadir a ese combo un datasource con un select seleccionando 2 columnas, la primera el ID del usuario (la clave, el identificador numérico único del usuario) y el nombre completo del usuario (le llamaremos nombre_cliente). El select quedaría algo así "select ID, nombre_cliente from clientes order by nombre_cliente"

Después en el combo pondremos que tiene 2 columnas, con el ancho "0;5" (para que oculte la columna del ID y muestre sólo el nombre_cliente)

Luego ponemos como columna dependiente la 1, para que cuando se seleccione un nombre, devuelva sólo el ID como value.

Pondremos "limitar a la lista" = false para que nos permita escribir en el campo, y en caso de escribir un nombre que no está, poder añadirlo (esto nos permite usar el evento "NotInList")

También cambiamos la propiedad autocomplete a true

Creamos código en el evento NotInList de cara a gestionar qué es lo que hacemos cuando el cliente escribe un nombre que no está en la base de datos. Lo primero sería añadir el cliente a la base de datos.

(Aquí convendría hacerlo de otra manera de cara a hacer una aplicación segura y que un usuario no pudiera hacer SQL Injections... pero lo vamos a simplificar)

if notisnull(combobox) then

Docmd.executesql "Insert into clientes(nombre_cliente, teléfono, email) values " & combobox & ",'555-555-555','[email protected]')"

end if

combobox.requery

'Con esto insertaríamos el cliente en la base de datos. Asumo que el ID es un autonumérico. 'El requery es para que recargue el combobox con el cliente nuevo.

' Añadiríamos el código para encontrar el ID del cliente que acabamos de añadir

dim rs as recordset

dim db as database

dim ultimo_id_anadido as integer

set db=currentdb

set rs=db.openrecordset("select last(id) as ultimo_id from clientes",dbopendynaset)

if rs.recordcount>0 then

ultimo_id_anadido=cint(rs.fields("ultimo_id))

else

' (No hay ningún registro en la base de datos)

end if

rs.close

call carga_datos(ultimo_id_anadido)

' Así tendríamos el último ID en la variable ultimo_id_anadido

' Después creamos una sub para que cargue los datos en el formulario, según un ID seleccionado, así nos servirá el mismo código para los 2 casos que planteas

private sub carga_datos(id_cliente as integer)

me.recordsource="select * from clientes where id=" & id_cliente

end sub

Después creamos otro evento en SelectedIndexChange (que saldrá cuando el usuario haya seleccionado un nombre de la lista)

Y simplemente hacemos el call...

Call carga_datos(cint(combobox.column(0)))

Seguramente habrá algún fallo en el código, pero bueno, más o menos lo que tienes que hacer es esto.

Agradezco tu esfuerzo, pero mis conocimientos de Access no me han ayudado mucho, he buscado otra vía y en función de eso nuevamente solicito tu ayuda en otra pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas