Evento NotInList

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
1
(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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas