Agregar dato a combobox y a tabla relacionada

Espero se encuentre muy bien, (esto ya parece carta de recomendación), quisiera ver si en sus posibilidades podría ayudarme con un problema que tengo le agradezco desde ya por su atención, tengo dos tablas:
Clientes
Id_Cliente ---Texto, NombreCliente --Texto
Pedidos
Id_pedido ---Texto, Id_cliente ---Texto
Tengo más campos pero solo estos necesito, difini como clave principal el la tabla clientes el id_cliente y foránea en la tabla pedidos, cree un formulario en base a pedidos y puse un cuadro combinado que me busque el id_cliente, bueno ahora viene mi problema, como tengo algunos clientes que yo agregue para que me los muestre el cuadro combinado para facilitar al usuario el ingreso, pero yo quisiera que se pudiera escribir un id_cliente que no exista y que en ese momento me muestre un mensaje que diga ¿cliente no existe desea crearlo? Si o no, si le doy si que me abra automáticamente el formulario de clientes y pueda agregarlo, que luego de ingresar los datos se cierre automáticamente para no hacer perder tiempo al usuario y luego me retorne al formulario de pedidos y ya tenga actualizado el cuadro combinado, en ese cuadro combinado tengo que muestre dos campos que es id_cliente y nombreCliente, y ese cuadro combinado guarda el valor en id_cliente, vi otra idea por allí, ya que fui al super y vi como ingresaban mi numero de nit y si ya había comprado alguna vez me mostraba mi nombre y como yo ya había comprado con anterioridad ya estaba en la base de datos de ellos por lo que aparecip mi nombre automáticamente, pero el cliente que venía antes era primera vez así que la señorita solo ingreso el nit y el nombre y listo quedo guardado en la base de datos y no hizo más que ingresar dos campos me gustaría hacer algo como lo del super o como lo anterior que he escrito ya que mi intención es que el usuario no tenga que dar tantos click para agregar algo, si no que sea rapido y fácil el uso de la aplicación, si me ayudara con las dos opciones mucho que mejor.

2 respuestas

Respuesta
1
Entre los eventos del combox para activar procedimientos tienes uno que es "Al no estar en la lista", este evento detecta si el dato introducido pertenece a la lista o no, en caso afirmativo, continuas con la introducción del resto de los datos de tu formulario activo y en caso negativo ejecuta el procedimiento que hayas definido.
Como tu mismo has dicho hay muchas formas de hacerlo.
Por tu pregunta veo que más o menos controlas, así que no voy a entrar en detalles, a menos que luego tengas una duda sobre lo que te planteo.
Hay un evento en el combox que es "Al no estar en la lista", para que se active al introducir un valor nuevo, la propiedad Limitar a la lista en la pestaña DATOS debe estar en SI.
En el evento "Al no estar en la lista" escribes
Dim BD as Database
Dim Clientes as RecordSet
Set BD=CurrentDB
Set Clientes=BD.OpenRecordSet
Clientes.AddNew
Clientes! IdCliente=NewData 'NewData es una variable que ya está declarada en el encabezado del procedimiento de evento
Clientes!NombreCliente=InputBox("ESCRIBA EL NOMBRE DEL NUEVO CLIENTE","NOMBRE Y APELLIDOS")
'Aqui puedes colocar alguna regla de validación de lo escrito, por ejemplo que no quede vacío
Clientes.Update
Clientes. Close
BD. Close
DoCmd. Requery("nombredelcombox")
End Sub
Respuesta
1
Te recomiendo que no uses solamente el combo para buscar por nombre, añade una caja de texto para que se pueda buscar por identificación del cliente. En el combo van a estar los creados y como este se llena a partir de una consulta solo se pueden escribir datos de la misma, de lo contrario sale el mensaje de error de access que dice: Este elemento no pertenece a la lista. He trabajado con algo similar a lo que necesitas y ubico un combo, para buscar por nombre y otro para ingresar el id manualmente, al no encontrar el id en la tabla cliente el sistema abre el formulario de creación de clientes. Te paso este código:
strSQL1 = "SELECT * FROM Cliente where id=" & Me.txtId.Value & ""
    Set rst1 = dbs.OpenRecordset(strSQL1)
    If Not rst1.EOF Then
        Me![txtNombre].Value = rst1![NombreCli]
        Me![txtTelefono].Value = rst1![TelCli]
        rst1.Close
        dbs.Close
    Else
        MsgBox "Cliente No Creado, Se abrirá la ventana de creación de clientes"
        stDocName = "frmClientes"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        Forms![frmClientes]![txtClicedula] = Me.txtId.Value
    End If
Este código lo colocas en el evento lostFocus del txt donde se ingresa el id del cliente en el pedido. El hace una búsqueda, si lo encuentra agrega los datos de nombre y teléfono en las respectivas cajas de texto. Si no, sale un mensaje y abre la ventana de creación de clientes y envía el id escrito al primer campo de este form.
Si no has trabajado con recordset se te va a a dificultar un poco, debes declarar las variables necesarias para ejecutar este código.
No conozco forma diferente para realizar este proceso.
Espero te sirva, si necesitas alguna aclaración puedes preguntar de nuevo pero tenme un poco de paciencia, ya que estaré un poco ocupado y no revisare mi correo a menudo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas