Access - cuadro combinado

 
Vista:

cuadro combinado

Publicado por Juan (3 intervenciones) el 21/02/2006 19:53:22
Solicito ayuda:
Tengo dos tablas, una de clientes y otra de pedidos.
Mediante un form agrego los pedidos de los clientes ya ingresados en la tabla, para lo cual agregue en el form un cuadro combinado. El problema se presenta cuando el cliente no esta ingresado previamente en la tabla clientes.
Genere una macro Cliente nuevo que abre el form cliente y donde agrego el cliente nuevo.cuando cierro el form clientes deberia poder elegir el nuevo cliente ingresado pero no figura.
Hice una macro para al enfocar el campo cliente me actualice la lista de clientes, lo cual lo hace y bien, pero se presenta problema con los otros campos del form que son requeridos, y que todavia no complete.
Alguien podra decirme de que forma se hace esto y que funcione correctamente.
Desde ya muchas gracias a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:cuadro combinado

Publicado por Marcos (236 intervenciones) el 21/02/2006 20:15:47
Juan:

Primero debes tener un formulario para actualizar tus clientes, es decir, en donde podrás ingresar más clientes a través de ese formulario. Para el ejemplo este formulario se llamará "MantClientes", luego en las propiedades de este formulario en la seccion formato-estilo de bordes, elije el que dice Diálogo.

Segundo: Estando dentro del formulario en donde buscas el clientes mediante un combo, crea un boton de comando el cual le pondras el nombre de agregarclte y en el evento Al hacer click escribe el sgte procedimiento.:

Private Sub agregarclte_Click()
On Error GoTo Err_agregarclte_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "MantClientes"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_agregarclte_Click:
Exit Sub

Err_agregarclte_Click:
MsgBox Err.Description
Resume Exit_agregarclte_Click
End Sub

Luego en el mismo boton de comando en el evento Al salir escribes el sgte código.

Private Sub agregarclte_Exit(Cancel As Integer)
DoCmd.RunCommand acCmdRefresh
End Sub

Cuando busques en el combo y no encuentras al cliente, pinchas este boton de comando y se habrira la tabla de clientes. Llenas los datos del nuevo cliente, cierras el cuadro de diálogo y listo.
Cuando nuevamente busques en el combo el nuevo cliente que has creado, lo encontrarás.

espero te sirva. saludos desde Chile.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cuadro combinado

Publicado por Marcos (236 intervenciones) el 21/02/2006 20:26:37
Juan:
Una corrección, en el párrafo final dice: ..... y se abrirá la tabla de clientes....
debe decir y se abrirá el formulario MantClientes....
Avisanos como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cuadro combinado

Publicado por Juan (3 intervenciones) el 22/02/2006 12:22:15
Marcos:
MUchas gracias y me sirvio mucho.
Ahora las preguntas: Como tendria que haces para que cuando abre el form mantClientes lo haga en forma de agregar nuevo. Que es lo que cambia en estilo de borde : dialogo.
En el funcionamiento escribo el nombre del nuevo cliente, como no es de la lista de la tabla clientes, aparece el mensaje de error. Hay alguna forma de que ese nombre ya escrito lo tome el formulario mantClientes para asi aprovechar lo escrito?
Se puede lograr algo con las propiedades del combo ya que hay una posibilidad que dice: limitara lista, pero que no puedo hacer funcionar, ya que lo que aparece para editar en el combo es el Id.
Nuevamente MUCHAS GRACIAS.
Juan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cuadro combinado

Publicado por Marcos (236 intervenciones) el 22/02/2006 13:34:22
Juan, veamos por parte.
Al procedimiento abrir formulario que te indiqué, le agregué una instrucción que te deja el form. listo para agregar otro registro. El procedimiento queda asi:

Private Sub agregarclte_Click()
On Error GoTo Err_agregarclte_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "MantClientes"
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.GoToRecord , , acNewRec

Exit_agregarclte_Click:
Exit Sub

Err_agregarclte_Click:
MsgBox Err.Description
Resume Exit_agregarclte_Click
End Sub

Para que el cursor quede con el enfoque en el primer campo que debes llenar, le puedes agregar el sgte. código.

DoCmd.GoToControl "Nombre del primer campo a llenar"

En el combo, en la sección datos-origen de la fila debieses poner: SELECT Clientes.IdCliente, Clientes.NombreCliente FROM Clientes ORDER BY [NombreCliente];
Luego en esa misma sección - Columna dependiente, pones 1.
Nota: En este ejemplo la tabla se llama Clientes y los campos que usa son IdCliente y NombreCliente.

En la sección Formato-Ancho columna del combo puedes poner: 0 cm;2,545 cm
Y en esa misma sección - Numero de columas le pones: 2.

Con esto, cuando despliegues el combo te debiese mostrar el nombre del cliente en vez del Id.
Entoces ahora limitas la lista del combo y listo.
Esta es una de las formas que puedes usar. Por lo menos yo la uso sin problemas. Cualquier cosa avisanos y espero te sirva.
saludos desde Chile.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cuadro combinado

Publicado por Marcos (236 intervenciones) el 22/02/2006 13:50:54
Con respecto a la consulta que haces del estilo de bordes - Diálogo, este hace que el formulario se habra en forma de ventana emergente sobre el formulario del cual lo has llamado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cuadro combinado

Publicado por Manuel (268 intervenciones) el 21/02/2006 20:40:28
Pudieras hacerlo de varias formas, una de ellas seria, abrir el formulario clientes pasandole un argumento, y al cerrarlo verificar dicho argumento y mandar a reconsultar el cuadro combinado. Porque hacerlo de esta forma, porque si el formulario clientes lo abres desde otra parte de tu sistema, esta sera la manera de diferenciar que lo abriste desde ese form y que no te de error al reconsultar un campo cuando este el form cerrado.
Para hacerlo un poco mas vistoso, pudieras utilizar el evento al no estar en lista, entonces pones un msg con los botones si y no, al pulsar en si, que abra el form clientes y al cerrar este que actualice el cuadro combinado clientes. Creo que la explicacion esta un poco confusa, voy a darte el codigo para que lo adaptes.

En el cuadro combinado, en el evento al no estar en lista

response = 0
dim x As Integer
x = msgbox("Este no es un elemento de la lista," & vbcrlf & "¿Desea agregarlo?", vbyesno)
If X <> 6 then exit sub
docmd.openform "Formulario_CLientes", acnormal, , , acformAdd, , "Act"

En el evento al cerrar del Formulario clientes

If me.openargs = "Act" then
Forms!Nombre_del_Form_Pedidos!Nombre_del_ComboBox.requery
end if

eso deberia de funcionar, claro falta la captura de errores, pero eso te lo dejo a ti.

Saludos
Manuel
Venezuela
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cuadro combinado

Publicado por Juan (3 intervenciones) el 23/02/2006 00:14:29
Muchas gracias Manuel.
Tarde pero termino de probar tu solucion. La primera parte funciona barbaro, peroal cerrar el form clientes encuentra que en el combo quedo la entrada que disparo la apertura del form clientes, y uno de los errores que manifiesta es que el elemento no pertenece a la lista y que debe actualizar (requery) antes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar