Cuadro combinado en access

Y ahora:
Tengo un problema con una aplicación que estoy haciendo sobre control de correspondencia en una empresa; tengo las tablas entradacorrespondencia, archivooficina(az compras, az gastos, etc..), tipodocumento(carta, fax, etc..)y sus correspondientes formularios. Quiero que mediante combo se pueda elegir el tipodocumento y tipoarchivo pero que si no están pregunte si los quiere añadir y lo haga, actualizando automáticamente los cuadros comb. Respectivos.
Casi lo he logrado pero cuando vuelve a mostrar el cuadro combinado me sale la lista anterior, una fila en blanco y debajo el nuevo registro.
Ayúdame, estoy nulo, me echa humo la cabeza.
Otra cosita, después de esto tendo un cuadro de opción para la ubicación actual del documento con 3 opciones:1ª el documento está en un archivo(se activa un combo con los registros de la tabla archivooficina);2ª el documento lo ha cogido alguien (se activa entonces 2 cuadros textos, uno para el nombre de la persona y otro para la fecha de préstamo); y 3ª, el documento se ha extraviado. Bien, entonces lo que quiero hacer es que si se activa la opción 1, los c.textos de la opción 2 estén en blanco y sin uso; si es la opción 2, que sean el combo de la opción 1 el que se quede en blanco e inhabilitado, y si es la opción 3 pues se queden en blanco e inhabilitados todos lo c.textos y combo de las otras opciones. He conseguido lo de inhabilitar unos y otros con .Enabled=True o .Enabled=False, pero no logro dejarlos en blanco.
Ah, se me olvidaba, antes de dejar nada en blanco, lógicamente debe mirar si los c.texto o el combo (dependiendo de la opción) esta escrito, y si es así, preguntar "¿aquí hay datos?¿los borro?" y si se responde si borrarlos y si es no dejarlo todo como estaba.
No sé si me he explicado bien.

1 respuesta

Respuesta
1
En una base tenía que hacer algo similar, si el usuario ingresaba un valor en un combo y ese valor no estaba en la lista entonces generé el siguiente procedimiento para el evento "Al no estar en lista"
Dim RsDest As Recordset
Set BD = CurrentDb
RESPUESTA = MsgBox("El valor Digitado no se encuentran en la lista, desea agregarlo?", vbYesNo + vbQuestion, "Nuevo Elemento")
If RESPUESTA = vbYes Then
Set RsDest = BD.OpenRecordset("usuarios")
If RsDest.RecordCount > 0 Then
Response = acDataErrAdded
With RsDest
.AddNew
![Nombre] = UCase(NewData)
![CodUsuario] = DMax("[CodUsuario]", "Usuarios") + 1
![Cliente] = "Externo"
.Update
End With
Me.Destinatario.RowSource = "SELECT Usuarios.CodUsuario, Usuarios.Nombre FROM Usuarios WHERE (((Usuarios.Cliente) = 'EXTERNO')) ORDER BY Usuarios.Nombre;"
End If
Else
Response = acDataErrContinue
Me.Destinatario.Undo
End If
Creo es lo que necesitas para la primera pregunta.
Para la segunda pregunta sería algo así:
En el evento después de actualizar de los botones pon un código como el siguiente:
Dim respuesta
If Me.opcion1 = True Then
If Me.Texto1 <> "" Then
respuesta = MsgBox("Existe información, desea eliminarla", vbYesNo + vbQuestion, "Elimnar")
If respuesta = vbYes Then
Me.Texto1 = "" 'Si no te permite esto podrías colocar un espacio me.texto1=" "
End If
End If
End If
Bueno, espero estas ideas te sirvan
Suerte
Gajimenb.
Me puedes especificar que nombre del ejemplo corresponde a un combo y cual a una tabla, etc..
En la 2ª respuesta no entiendo lo de Me.opcion1=True y Me.texto1
Gracias
En el ejemplo la tabla se llama "Usuarios" y el combo se llama "Destinatario".
Te voy a explicar en detalle lo que hace el código anterior.
'Creamos una variable que almacenará posteriormente algunos registros de una tabla o consulta(por eso es recordset)
Dim RsDest As Recordset
La variable BD contendrá los objetos (tablas, consultas...) de la base
Dim Bd as database
'Estas variables contendran diferentes valores
Dim respuesta, sql
Asignamos la base actual a BD
Set BD = CurrentDb
'Respuesta almacene el botón que oprimió el usuario en este cuadro de mensaje, el cual aparece cuando se introduce un elemento nuevo en el combo
RESPUESTA = MsgBox("El valor Digitado no se encuentran en la lista, desea agregarlo?", vbYesNo + vbQuestion, "Nuevo Elemento")
'Si el usuario escogió el botón "Si" se asigna en RsDes toda la tabla "Usuarios"
If RESPUESTA = vbYes Then
Set RsDest = BD.OpenRecordset("usuarios")
If RsDest.RecordCount > 0 Then
Response = acDataErrAdded
'Aqui se adiciona un registro nuevo a la tabla, conteniendo el nuevo valor que el usuario escribió en el combo
With RsDest
.AddNew
![Nombre] = UCase(NewData) 'Ucase pone todo en mayúsculas
Como en la tabla tengo un código para los usuarios, la función dmax busca el máximo del código, le agrega uno y ese código lo adjunta en el nuevo registro
![CodUsuario] = DMax("[CodUsuario]", "Usuarios") + 1
![Cliente] = "Externo"
.Update
End With
'Esta línea asigna de nuevo los valores que van a aparecer en el combo luego de añadir el último valor
Me.Destinatario.RowSource = "SELECT Usuarios.CodUsuario, Usuarios.Nombre FROM Usuarios WHERE (((Usuarios.Cliente) = 'EXTERNO')) ORDER BY Usuarios.Nombre;"
End If
Else
' Si el usuario responde que no no se agrega el valor y no pasa nada
Response = acDataErrContinue
Me.Destinatario.Undo
End If
En el evento después de actualizar de los botones pon un código como el siguiente:
Entiendo que en esencia, ¿el problema de la segunda pregunta es eliminar el contenido de un campotexto cuando se selecciona alguna otra opción pero preguntando primero si se quieren o no efectivamente eliminar los datos cierto?
Si es así procedo a detallar el código necesario:
Antes que nada tienes que tener claro los botones de opciones y las casillas de verificación tienen dos (en realidad pueden tener tres) estados: activo o inactivo (o lo que es igual verdadero o falso)
Dim respuesta
'aqui se evalúa si el valor del boton de opción es verdadero o falso
If Me.opcion1 = True Then
'aqui Se evalúa si un cuadro de texto tiene o no datos, en caso de tenerlos:
If Me.Texto1 <> "" Then
Se pregunta al usuario si quiere borrar los datos de texto1
respuesta = MsgBox("Existe información, desea eliminarla", vbYesNo + vbQuestion, "Elimnar")
If respuesta = vbYes Then
Me.Texto1 = "" 'Si no te permite esto podrías colocar un espacio me.texto1=" "
End If
End If
End If
Espero te de más luces, de lo contrario seguimos mirando
gajimenb
Dim respuesta
If Me.opcion1 = True Then
If Me.Texto1 <> "" Then
respuesta = MsgBox("Existe información, desea eliminarla", vbYesNo + vbQuestion, "Elimnar")
If respuesta = vbYes Then
Me.Texto1 = "" 'Si no te permite esto podrías colocar un espacio me.texto1=" "
End If
End If
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas