Control de ficha (avanzado?)
He creado un control de ficha en un formulario de la base de datos A,
Preguntas:
*Se podría poner en una de las páginas (pestaña) de este control de ficha el resultado de una consulta o los datos de una tabla de una base de datos externa B?
*Por echarle imaginación, se podría hacer que las pestañas del control de ficha se muestren(o cambien de aspecto;negrita, color de la fuente, ¿etc) sólo en caso de que contengan información?, esto teniendo en cuenta que el control de ficha nos mostrará la info del registro que hayamos llamado en el formulario (principal)
Sigo trabajando en mi base de datos y agradecería mucho tu orientación e ideas.
1 respuesta
1º/ Sí se podría, tendrías que usar una consulta de este tipo:
SELECT NombreCampos FROM NombreTabla IN RutaBDExterna
2º/ Si, lo podrías hacer usando formatos condicionales en los campos
Hola
Podrías definir la sintaxis completa para el campo [ACUERDO] de la consulta [ACUERDOS], sólo necesito que salga el contenido de este campo memo en esa pestaña en concreto.
Cuando hablas de poner formatos condicionales en los campos... en que parte de la pestaña habría que definir esa condición, en propiedades de la pestaña? como comenté antes, me gustaría que la pestaña aparezca , sólo si tiene algo que mostrar... puedes darme más detalles de como hacerlo.
Gracias, saludos
David
Empiezo por el final:
Lo del formato condicional no lo defines en ninguna pestaña, al hacer click derecho en un campo, en vista diseño, es la segunda opción empezando por abajo.
La sintaxis de la SQL debería ser así:
"SELECT ACUERDO FROM ACUERDOS IN " & RutadelaBD
Si la BD se llamara B.mdb y estuviera en Mis Documentos, sería así:
"SELECT ACUERDO FROM ACUERDOS IN 'C:\Mis Documentos\B.mdb'"
Te pongo aquí unas webs que te pueden ayudar:
Hola Sveinbjorn,
Ya tengo claro lo de la ruta para enlazar con objetos externos a la bd, gracias.
Para la segunda parte, la de ocultar la pestaña del control de ficha he encontrado una consulta en este foro que es lo que necesito, pero no soy capaz de adecuarla a mi bd.
If Me.Cuadro_combinado5.Value = "perros" Then
Me.Secundario3.Form![peces].Visible = False
Me.Secundario3.Form![gatos].Visible = False
end if
donde secundario3 es el nombre del subform y perros / gatos / peces los nombres de las paginas del tab en el subform
En mi caso: tal y como lo tengo ahora , no funciona.
If Me.ACUERDO.Value = NULO Then
Forms![attpublico]![TabCtl31].Form![ACc].Visible = False
Forms![attpublico]![TabCtl31].Form![ACc].Visible = True
End If
Donde ACUERDO es el campo que se ve en la ficha
attpublico es el nombre del formulario
TabCtl31 es el ¿subformulario? nombre del control de ficha
Acc es el nombre de la pestaña
Lo que quiero hacer es, si el campo ACUERDO está vacío, sin datos, la pestaña del control de ficha Acc, no aparezca.
Puedes corregirme la rutina, o darme alguna pista nueva, he probado varias combinaciones pero no me funciona.
Gracias de antemano.
Saludos
David
TabCtl31 es el nombre del control ficha. En tu caso, el código debería ser así:
If Me.ACUERDO.Value = Null Then
Me.ACc.Visible = False
Me.ACc.Visible = True
End If
Es decir, para mostrar/ocultar pestañas el código es Forms.NombreFormulario.NombrePestaña.Visible=Tue/False
Hola Sveinbjorn,
No hay forma, he intentado todas las formas posibles de escribir el código según lo comentado, pero el resultado es nulo, no afecta a las pestañas que deberían desaparecer.
Tiene que ver que esté usando access2007 a la hora de escribir el código?
Gracias por tu ayuda de cualquier manera, saludos
David
Haz una cosa, sube la BD a www.filebig.net, pégame el enlace de descarga aquí, y en cuanto pueda le echo un vistazo y te comento.
Hola , te adjunto el enlace del archivo que he subido.
He simplificado la bd, todo lo que he podido, quitando tablas , formularios y registros que no afectan al formulario en el que trabajamos....
http://www.filebig.net/files/r4KRQGqVtq
http://www.filebig.net/files/r4KRQGqVtq
<b><a href="http://www.filebig.net/files/r4KRQGqVtqhttp://www.filebig.net/files/r4KRQGqVtq">http://www.filebig.net/files/r4KRQGqVtq</a></b>
http://www.filebig.net/del.php?r4KRQGqVtqt9ir5hLrPu
Muchas gracias por el interés que pones y la ayuda prestada.
Saludos
David
Ya lo tengo.
Tienes que cambiar esto en NIF_AfterUpdate:
If Me.ACUERDO.Value = Null Then
Me.Forms.attpublico.ACUERDOS.Visible = False
Me.Forms.attpublico.ACUERDOS.Visible = True
End If
por esto otro:
Dim miAcuerdo As String
miAcuerdo = Nz(DLookup("ACUERDO", "ACUERDOS", "[DNI]='" & Me.NIF.Value & "'"), "")
If miAcuerdo = "" Then
Me.ACUERDOS.Visible = False
Else
Me.ACUERDOS.Visible = True
End If
Además, tienes que copiarlo y pegarlo también en el evento Al activar registro del formulario (Form_Current)
Al código que tenías, aparte de sobrarle el Forms. Attpublico, te faltaba un Else para separar el que sea visible o no.
Además, le cambié la forma de evaluar la condición, por medio de una variable que busca el valor de ACUERDO en la tabla ACUERDOS.
Hola Sveinbjorn,
Genial el resultado, he aplicado el código a varias pestañas y funciona perfectamente.
No he cerrado la consulta y valorado, porque se me ha ocurrido una mejora para el formulario y tiene que ver con el control de ficha (y aprovechando que tienes el formulario).
He incluido el campo OBS en una pestaña (OBSERVACIONES) del control de ficha , el campo OBS tiene un código (creado por ti), que te detallo:
Private Sub OBS_Enter()
Dim miValor As Variant
Dim miAñadido As String
miAñadido = Date & "//" & Me.EXPTE.Value & "//" & Me.Usuario.Value & ":"
'Cogemos el valor existente en el campo memo:
miValor = Nz(Me.OBS.Value, "")
'Si no teníamos nada, ponemos la fecha, el otro campo y el cursor al final
If miValor = "" Then
Me.OBS.Value = miAñadido
Me.OBS.SelStart = Len(miAñadido) + 1
Else
'Si ya teníamos algo escrito, lo ponemos de nuevo, saltamos una linea y ponemos
' la fecha, el otro campo y el cursor
Me.OBS.Value = miAñadido & " " & vbCrLf & miValor
Me.OBS.SelStart = Len(miAñadido) + 1
End If
Podrías decirme las modificaciones para que funcione este código con el cambio de situación del campo OBS ( este campo pasa de ser un campo del formulario a integrarse en el control de ficha(Texto51), en la pestaña nueva creada OBSERVACIONES.
Bien pensado , esta debería ser otra pregunta, si así lo estimas, dímelo y la vuelvo a formular.
Gracias una vez más por tu ayuda
Saludos
David
En principio creo que no tienes que hacer ninguna variación al código, sólo reprogramarlo de nuevo, pues al mover el control OBS es posible que se te desvinculara del procedimiento.
De todos modos, igual te es mejor configurar ese control como un subformulario, del mismo modo que con ACUERDOS.
Hola,
Hecho, como tú dices , funciona perfectamente.
Se me ha planteado otro problema, al crear una pestaña (BANCOS)en el control de ficha, que contiene el resultado de una consulta (con varios campos; ENTIDAD,SUCURSAL,INGRESO,ETC).
Puedes decirme los cambios en el código para que funcione como el anterior, suponiendo que tomemos el campo ENTIDAD como referencia a la hora de ocultar o mostrar la pestaña, lo he intentado siguiendo el tuyo pero no doy con el código correcto.
Dim miAcuerdo As String
miAcuerdo = Nz(DLookup("ACUERDO", "ACUERDOS", "[DNI]='" & Me.NIF.Value & "'"), "")
If miAcuerdo = "" Then
Me.ACUERDOS.Visible = False
Else
Me.ACUERDOS.Visible = True
End If
Agradecido de antemano.
Saludos
David
Si la consulta se llama "BANCOS", el código sería:
Dim miEntidad As String
miEntidad = Nz(DLookup("ENTIDAD", "BANCOS", Aquí criterio que relacione), "")
If miAcuerdo = "" Then
Me.BANCOS.Visible = False
Else
Me.BANCOS.Visible = True
End If
Falta por poner un criterio que relacione los datos (que yo no sé cual es....). En el código anterior, los dos formularios estaban relacionados por DNI (subformulario) y NIF (Formulario principal), por eso "[DNI]='" & Me.NIF.Value & "'". Tendrás que poner entre los corchetes el campo de la consulta que está relacionado, (supongo que será también el DNI o NIF) y el valor del campo del Formulario (Me.NombredelCampo.Value)
- Compartir respuesta