En Access, un Formulario de PEDIDOS, en un Subformulario PEDIDOS_CLIENTES, un combo presenta una lista de clientes (pero presenta apellido y teléfono, ocultando su clave ID), quiero que al no encontrar el nombre que busco me lo añada a la tabla clientes. Lo estoy intentando manejar en el evento NOTINLIST pero no atino a hacerlo. Me ayudas.
1 respuesta
Respuesta de soria4xse
1
1
soria4xse, Experto en Microsoft Access y SQL Server
(Resumen de lo que tengo publicado en mi web de oferta de soporte y desarrollo profesional en arrakis: 2 alternativas) Tip 10 - Usando Cuadros Combinados (1998) Añadir Elementos a la Lista de un Cuadro Combinado Código del ejemplo SOLUCIÓN.mdb : Agregar una nueva categoría escribiendo un nombre en el combo ID de categoría. Vale para access 97, aunque CONST no son necesarias -podemos usar constantes predefinidas-, es más actual usar RunCommand que DoMenuItem, etc. He acortado algunos nombres. Salto el bloque de código para 'truncar longitud' ------------ Sub IdCategoría_NotInList (NewData As String, Response As Integer) Dim nuevaCategoría, msgDiálogo As Integer, título As String Const CM_ACEPTAR = 0, CM_SÍNO = 4, CM_ICOINTERROG = 32, CM_ICOEXCLAMAC = 64, CM_DEFBOTÓN1 = 0, IDSÍ = 6, IDNO = 7 'preguntar al usuario si desea agregar una nueva categoría. título = "Esa categoría no está en la lista" msgDiálogo = CM_SÍNO + CM_ICOINTERROG + CM_DEFBOTÓN1 nuevaCategoría = MsgBox("¿Desea agregar una nueva categoría?", msgDiálogo, título) 'A partir de aquí, se ejecuta sólo si el usuario desea agregar. If nuevaCategoría = IDSÍ Then '1º- Eliminar el nuevo nombre del c. c. ID de categoría para que se pueda actualizar el control cuando el usuario regrese al formulario. DoCmd DoMenuItem A_FORMBAR, A_EDIT, A_UNDOFIELD, , A_MENU_VER20 '2º- Mostrar un cuadro de mensaje y ajustar la longitud del valor introducido en el c. c. ID de categoría. título = "Nombre demasiado largo" msgDiálogo = CM_ACEPTAR + CM_ICOEXCLAMAC '3º- Abrir el form. Agregar categoría. DoCmd OpenForm "Agregar categoría", A_NORMAL, , , A_ADD Forms![Agregar categoría]![Nombre de categoría] = NewData '4º- Continuar sin mostrar el mensaje de error predeterminado. Response = DATA_ERRCONTINUE End If End Sub ------------ Añadir Elementos a la Lista de un Cuadro Combinado: mi alternativa corta, con DAO Para combos de tablas con pocos campos (tipo ID, Descripción) Supongamos la base de datos CLUB2 ( club2.zip, 2.0, 19k) con: "Tabla1" datos de socios -maestro- "Tabla2" incidencias de socios -movimientos- "Form1" formulario para editar las incidencias de socios (de Tabla2) [campo22] Cuadro combinado (en Form1). Contiene datos de Socios (Tabla1) Nombre, Edad. Nombre: Campo22 Origen del control: Nombre Tipo de origen de la fila: Tabla/Consulta Origen de la fila: Select [Nombre],[Edad] From [Tabla1]; Número de columnas: 2 ¿El cuadro combinado [campo22] se puede crear mediante asistente? Siempre y cuando su tabla origen sea tabla1, el campo que proporciona la lista sea nombre, un campo extra sea edad, etc. Añadir socios (a Tabla1) desde [Campo22] (en Form1 (basado en Tabla2) incidencias) ------------ Sub Campo22_NotInList (newdata As String, response As Integer) ok = MsgBox(newdata & "¿quiere darlo de alta?") If ok = 1 Then ' SÍ, DAR ALTA Dim db As Database, rs As Recordset, edd Set db = CurrentDB() Set rs = db.OpenRecordset("tabla1", DB_OPEN_DYNASET) ' 1º : AÑADIR nuevo nombre a tabla1 mediante DAO rs.AddNew rs!nombre = newdata '2º completar registro con InputBox (esto tantas veces como campos) edd = InputBox("edad = ") rs!edad = edd '3º terminar el alta (otra vez, mediante DAO) rs.Update rs.Close db.Close '4º :access atualiza cuadro combinado response = data_erradded Else ' NO DAR ALTA response = data_errcontinue End If End Sub ------------
Muy buena tu respuesta, opté por la alternativa corta, pero me sale un error en la línea: Dim db As Database, me dice que ocurrió un error de compilación: no se puede encontrar el proyecto o la biblioteca. ¿Tienes idea de a qué se debe?
Muy buena tu ayuda, aunque no indicabas el añadir la biblioteca de objetos DAO 3.6, y he cambiado varias cosas para poder utilizarla con Access 2000, pero me has orientado.