Combinación de tabla para formulario
Estoy creando una BD para registro de intervenciones. Tengo un formulario general y varios subformularios (datos del caso, datos de las personas, gestiones, etc) tanto para los datos del caso como para las gestiones necesito combinar unas tablas que no se modificaran. Me explico.
Para los datos del caso utilizo una tabla que tiene dos columnas: ámbito, tipos. Necesito que cuando en el cuadro combinado se seleccione uno de los ámbitos, el cuadro combinado de tipos, sólo muestre los de ese ámbito.
Para los datos de las personas utilizo una tabla que tiene varias columnas Tipos de vía, Nombre de la Vía, Dirección completa, Barrio y código postal. Aquí necesito que cuando la persona seleccione un nombre de la vía, el desplegable de dirección completa muestre sólo lo relacionado con ese nombre de vía, al igual que el cuadro combinado del barrio y del código postal.
He encontrado una información que me aconsejaba poner en la vista de presentación del formulario y dentro del sub formulario, en el origen de la fila lo siguiente:
[Formularios]![SUB FORMULARI DADES CAS]![ÀMBIT] (para el subformulario casos)
Pero no me devuelve nada.
Te digo cómo lo haría yo, aunque se podría hacer de otras formas:
1º/ En el cuadro combinado Tipo del formulario (supondré que se llama cboTipo), programaría su evento "al recibir el enfoque" con este código:
Private Sub cboTipo_GotFocus() If Nz(Me.cboAmbito,"")="" Then Me.cboTipo.Rowsource="SELECT Tipo FROM NombreTabla" Else Me.cboTipo.Rowsource="SELECT Tipo FROM NombreTabla WHERE Ambito='" & Me.cboAmbito & "'" End If Me.cboTipo.Requery End Sub
He supuesto también que el cuadro combinado Ambito se llama cboAmbito. Solo te faltaría cambiar NombreTabla por el nombre de tu tabla.
2º/ Para la dirección, lo harías de la misma forma.
¡Gracias Por tu pronta respuesta. Lo voy a probar a ver si me funciona..... De todas maneras te agradezco mucho
Mira he intentado lo que me aconsejaste y nada, no he podido. Copio lo que hice a ver si puedes ver donde está el error:
También te envío dos imágenes más de los dos cuadros combinados y de un trozo de la tabla
Si me puedes ayudar un poco más, a ver si puedo sola hacer la de las direcciones, barrio y código postal.
No dices por qué no te sale...¿te da algún error, y en tal caso cual?
Viendo las imágenes, lo que se me ocurre es que tus cuadros combinados devuelvan los valores de los campos NombreTipus y NombreAmbit. En ese caso, el código debiera ser algo así:
If Nz(Me.[Ámbit],-1)=-1 Then Me.Tipus_Conflicte.Rowsource="SELECT NombreTipo, [Tipus Conflicte] FROM TipusConflicte_Ambit" Else Me.Tipus_Conflicte.Rowsource="SELECT NombreTipo, [Tipus Conflicte] FROM TipusConflicte_Ambit WHERE [Nombre Ámbit]=" & Me.[Ámbit] & End If Me.Tipus_Conflicte.Requery
¡Gracias! de nuevo.
El error consiste en que me pide este parámetro. Y en las direcciones me sale en blanco
Ese error no parece que derive del código que te propuse...
¿Sería posible que me hicieras llegar una copia de tu BD, sin datos personales, y solo con las tablas y formularios que intervienen en tu pregunta?
Voy a estudiarme los documentos que me enviaste que estoy segura es un error fácil de corregir. Pero como no soy experta me hago un lio.
Prueba y me vas comentando. Y si no, si me envías la copia de la BD, con gusto la miro y te doy una solución exacta al problema.
Creo que mi error es hacer los combos de las tablas, veo que tu lo haces como combos independientes. Creo que esa será la solución.
Sube la copia de tu Bd a Dropbox o similar y pon aquí el enlace para descargar.
Que los combos sean o no independientes no tiene que ver en que el sistema funcione.
Buenos dias
He utilizado tu base de datos de muestra y he podido solucionar la mayoria de los problemas. El sub formulario de dades del caso funciona bien al igual que cuando lo inserto en el formulario Registro (que será desde donde se introduciran los datos). Pero el otro, me funciona relativamente bien, en el sub formulari participats funciona hasta el nivel 3 (Adreces, Adreça Complerta y Zip Code) el barrio no se actualiza. Para generar la cascada de barrio, lo hice igual que el ZipCode dependiendo de Adreça Complerta, ya que debe depender de este concepto.
Sin embargo cuando paso el subformulario a general, me pide un parámetro, tal como antes
He estado toda la mañana intentando ver cómo corregir esto y no he podido.
Por otra parte, como borré todos los parámetros para limpiar de errores, borre uno que tenia que ver con el IdRegistre, que quería que fuera consecutivo, que cambiara con el año, del tipo 20190001, 20190002, etc., que me había funcionado pero se ha borrado. Si eso ya lo arreglo luego.
Cuelgo un resumen de la BD en el Drive ya que no tengo Dropbox y no quiero ponerme a bajar algo teniendo esto otro.
https://drive.google.com/file/d/10Zv2GZS3Z2LYjkoUGQ6StgqV4Wu14rQm/view?usp=sharing
Y de nuevo gracias por tu ayuda
A ver si así te sirve: http://www.filebig.net/files/UgGz2xqxPk
He modificado un poco los orígenes de los cuadros combinados para que en un principio no se filtren, y se filtren al recibir el enfoque, aprovechando el código que ya tenías ahí programado para controlar que el combinado del que dependen tiene algún valor.
Cuando usas la Adreça Complerta como filtro, tienes que usar un truquillo ya que hay valores que contienen apostrofe, lo que hace que "casque" la SQL: hay que usar replace para cambiar los apostrofes (') por doble apostrofe (' ').
Y creo que no hice ningún otro cambio reseñable.
Hola de nuevo. Ya no me genera problemas la selección. He copiado los cambios a mi proyecto, pero me he encontrado con un pequeño problema, algunas de las ADRECES (Nom_via) también tienen apostrofe y la verdad es que yo no sé nada de lenguaje SQL, así que sé que en alguna parte debo poner replace Nom_via " ' "....
¡Mucho madrugas!, je je.
Tienes que hacerlo aquí y así:
Private Sub ADREÇA_COMPLERTA_GotFocus() If IsNull(Me.ADRECES.Value) Then MsgBox "seleccionar adreces", vbInformation, "AVIS" Else Me.Adreça_Complerta.RowSource = "SELECT DISTINCT [Adreça_Complerta] FROM Adreces WHERE Nom_Via='" & Replace(Me.ADRECES,"'","''") & "' ORDER BY [Adreça_Complerta]" Me.Adreça_Complerta.Requery End If
Buen día. Madrugamos los dos veo!.
Y al que madruga LOS SERES SUPERIORES le ayudan! Gracias y buen domingo
Hola, me he estado rompiendo la cabeza con el asunto de la autonumeración personalizada, secuencial con reinicio anual. He utilizado tanto las indicaciones que has dado en la consulta: "Como crear un numero consecutivo personalizado en access", como otra que encontré en un blog: https://www.accessyexcel.com/cinco-formas-de-generar-un-valor-unico-para-usarlo-como-campo-clave/ y ninguna de las formas me funciona. He borrado todos los datos de la tabla, he vuelto a ingresar registros y nada. Copio los dos códigos que he usado y ninguno de los dos me funciona, no 'escribe' automáticamente el código, aunque no aparece ningún error.
Este es el código que tu recomendaste:
vAutonum As Variant, vUltimo As Variant
Dim vAño As Long
'Le damos a la var. vAño el valor del año actual
vAño = Right(Year(Date),4)
'Cogemos el valor del campo IdREGISTRE
vAutonum = Me. IdREGISTRE.Value
'Si vAutonum no es nulo, es porque ya hay valor en él, entonces salimos del procedimiento
If Not IsNull(vAutonum) Then Exit Sub
'vUltimo es igual al máximo de los 4 últimos caracteres de la derecha del campo
' IdREGISTRE y cuyo año sea igual al actual
vUltimo = Right(DMax("IdREGISTRE ", "TREGISTRE", "Left(IdREGISTRE, 4)=" & vAño), 4)
'Si vUltimo es nulo, es porque no hay ningún cve_folio, entonces le damos valor 0
If IsNull(vUltimo) Then
vUltimo = 0
End If
'Sumamos 1 al valor anterior
vUltimo = Right(DMax("IdREGISTRE ", "TREGISTRE", "Left(IdREGISTRE, 4)=" & vAño), 4)
Me.cve_folio= vAño & Format(vUltimo, "0000")
El que escribiste en la BD que te envie:
Private Sub Form_Current()
Dim vUltimo As Long
Dim vContador As String
Dim rst As DAO.Recordset
Const miSQL As String = "SELECT Mid([IdREGISTRE],5,3) AS Expr1 FROM TREGISTRE WHERE ((Right([IdREGISTRE],4)=Year(Date()))) ORDER BY Mid([IdREGISTRE],5,3)"
If Not IsNull(Me.IdREGISTRE) Then Exit Sub 'Si ya hay un num. oficio, sales sin hacer nada
Set rst = CurrentDb.OpenRecordset(miSQL)
'Si no devuelve registro, inicias el contador
If rst.RecordCount = 0 Then
vUltimo = 0
Else
'Si devuelve registros, coges el último
rst.MoveLast
vUltimo = rst(0)
End If
'Cierras el recordset
rst.Close
Set rst = Nothing
'Le añades uno al contador
vUltimo = vUltimo + 1
'Creas el contador
vContador = Year(Date) & Format(vUltimo, "0000")
'Lo muestras en el cuadro de texto:
Me.IdREGISTRE = vContador
End Sub
este otro:
Private Sub FORM_Current ()
If Not Me.NewRecord Then Exit Sub
Me.IdRegistre = Year(Date) & Format(Nz(DMax("Val( Mid(IdRegistre, 4))", "TRegistre", "Val( Left(IdRegistre,4)) = " & Year (date)), 0) + 1, "0000")
End Sub
Ninguno de los tres funciona. Se te ocurre una solución? Gracias y espero no molestarte más
En la BD que te envié ya tenías ese código, yo únicamente le cambié un poco una línea: donde tenías:
vContador = Format(vUltimo, Year(Date) & "0000")
yo puse:
vContador = Year(Date) & Format(vUltimo, "0000")
Que es más "correcto", pero no me paré a mirar si funcionaba o no, como ya venía hecho...
Te envío la BD de nuevo con el código funcionando: http://www.filebig.net/files/j7P3sLKGim
Y te invito, además de ver los manuales y ejemplos en la web de Neckkito, en la que colaboro, a que te pases por nuestro foro de Access: https://nksvaccessolutions.com/Foro/
- Compartir respuesta