Añadir un nuevo elemento a una lista

En mi base de datos de libros tengo un campo para asociar un autor a un libro. La lista de autores (y sus datos asociados) están en otra tabla.
Lo que necesito es lo siguiente:
1) Si el Autor ingresado no está en la lista, me pregunte si deseo añadirlo (preferiblemente con un mensaje personalizado).
2) Si respondo que sí, que me abra un formulario ya armado donde cargar los restantes datos (fecha y lugar de nacimiento, etc).
3) Si respondo que no, que no lo añada o que me advierta que se añadió pero sus datos quedaron incompletos (mejor si se puede que no lo añada y que insista con añadirlo).
4) Al confirmar con el SI, el Autor cargado deberá estar ya escrito en el campo del nuevo autor para evitar reescribir el nombre
El motivo por el que quiero que sea un mensaje personal es más que nada por si se escribe un dato mal, que exista una segunda capa de control de este dato.
Los datos a usar en este caso (los que creo relevantes):

  • Form de Carga de nuevo libro: New_Libro
  • Form de Carga de nuevo Autor: New_Autor
  • Campo autor en New_Libro: lstAutor
  • Campo autor en New_Autor: txtAutor
  • En ambas tablas (LIBRO y AUTOR) el campo AUTOR recibe este nombre justamente.

Agradecido desde ya.

1 Respuesta

Respuesta
1

Echa un vistazo a este ejemplo de Neckkito Nckhttp://siliconproject.com.ar/neckkito/index.php/component/content/article/93-ejemplos-explicados/ejemplos-de-formularios/123-alta-en-formulario-desde-formulario 

Prácticamente hace todo lo que quieres.

Saludos!


Agradecido de la pronta respuesta pero en realidad eso del ejemplo es lo que ya hace mi base de datos. Pero no es lo que necesito hacer.
Quizá no me expliqué bien. Lo que sucede ahora es:

El elemento  no está en la lista, pero me abre el formulario en blanco.

Y lo que quiero que suceda es:

El elemento no está en la lista pero el formulario se abre con el contenido cargado, vinculado al del Nuevo libro (El mensaje personalizado es opcional, en definitiva).

Perdón por el ejemplo tan burdo. Espero que ahora se entienda bien.

Gracias por la pronta respuesta pero el ejemplo es lo que mi base de datos ya hace.
Actualmente sucede lo siguiente:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario en blanco.
Lo que quiero que haga:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario con el nombre ya precargado para no volver a escribirlo evitando posibles errores de tipeo, por ejemplo.
Nota: El mensaje personalizado es opcional.

TERCER INTENTO DE POSTEAR:

Gracias por la pronta respuesta pero el ejemplo es lo que mi base de datos ya hace.
Actualmente sucede lo siguiente:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario en blanco.
Lo que quiero que haga:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario con el nombre ya precargado para no volver a escribirlo evitando posibles errores de tipeo, por ejemplo.
Nota: El mensaje personalizado es opcional.

CUARTO INTENTO DE POSTEO:

Gracias por la pronta respuesta pero el ejemplo es lo que mi base de datos ya hace.
Actualmente sucede lo siguiente:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario en blanco.
Lo que quiero que haga:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario con el nombre ya precargado para no volver a escribirlo evitando posibles errores de tipeo, por ejemplo.
Nota: El mensaje personalizado es opcional.

QUINTO INTENTO DE RESPUESTA
Gracias por la pronta respuesta pero el ejemplo es lo que mi base de datos ya hace.
Actualmente sucede lo siguiente:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario en blanco.
Lo que quiero que haga:

Escribo el nuevo autor, no existe, me ofrece añadirlo y al confirmar me abre el formulario con el nombre ya precargado para no volver a escribirlo evitando posibles errores de tipeo, por ejemplo.
Nota: El mensaje personalizado es opcional.

Perdón por repetir tantas veces la misma respuesta pero evidentemente algo funcionaba mal con TE. No me refrescaba el contenido. Tuve que hacer LogOff y volver a ingresar.

OK, no te había entendido bien. Mira este ejemplo que tengo en esa web: http://siliconproject.com.ar/neckkito/index.php/96-ejemplos-explicados/ejemplos-de-controles/311-cuadros-combinados-inteligentes 

En él explico cómo hacer para añadir un nuevo valor a la lista en caso de que no esté(pero lo añade directamente a la tabla, sin pasar por el formulario)

Solamente le faltaría añadir el mensaje personalizado, que lo harías en el código del evento "al no estar en la lista", antes de ejecutar la SQL:

Private Sub lstAutor_NotInList(NewData As String, Response As Integer)
 Response = acDataErrContinue
If MsgBox("Mensaje personalizado, ¿Dar de alta?",vbYesNo+vbInformation)=vbYes Then
 CurrentDb.Execute "INSERT INTO AUTOR(Autor) VALUES('" & NewData & "')"
 'Coges el último ID, que coincide con el valor recien agregado y se lo pasas al combo
 Me.lstAutor = DLast("IDAutor", "Autor")
 Me.Titulo.SetFocus
 Me.lstAutor.Requery
 Me.lstAutor.SetFocus
Else
'Aqui lo que quieras si pulsas NO
End If
End Sub

Si aún así quieres abrir el formulario y pasar el dato del autor, cambia la linea delCurrentDb.Execute por ésta:

DoCmd.OpenForm "NewAutor",,,,acFormAdd,acDialog, NewData

Y en el evento "al abrir" del formulario NewAutor:

If Me.NewRecord AND Len(Me.OpenArgs)>0 Then
Me.Autor=Me.OpenArgs
End If

Adáptalo a los nombres de tus campos, por si no puse los correctos.

Saludos!


¡Excelente, maravilloso!
Sinceramente no es precisamente lo que yo quería hacer, pero me abrió a una posibilidad MUCHO mejor. Con esto, puedo añadir más rápido los datos y opcionalmente cargar los datos adicionales del autor (Biografía, fecha y lugar de nacimiento, etc.). Lo que hacía en tres formularios y cientos de MSGBOX, ahora lo hago en dos (el que añade libro y el que permite editar, que en realidad es opcional, por lo que se reduce a UNOOOOOO) Salto en una pata.
¡Eres un genio!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas