Filtros access
Tengo un problema tengo una tabla que se llama clase y otras dos tres tablas más que están ligadas a esta tabla.
Necesito filtrar la tabla clase y me dice que no puedo filtrarla porque está relacionadas con otras tablas, estoy usando un código que me encontré en internet, que a continuación verás:
___________________________________________________________________
Option Compare Database
Option Explicit
'Un objeto clsControlFilter para cada control por el que queramos filtrar
Dim clCtrlFilter As clsControlFilter
Dim clCtrlFilter2 As clsControlFilte
Dim FiltroMix As ClsFiltroMix
_____________________________________________________________
Private Sub btnAbreForm_Click()
'Generamos el botón para abrir el formulario que filtramos usando el asistente
Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = Nz(Me.txtWhere) ' Sólo tenemos que asignar a mano el valor de txtWhere
stDocName = "registrar especies"
DoCmd.OpenForm stDocName, , , stLinkCriteria
End Sub
________________________________________________
Private Sub Form_Close()
Set clCtrlFilter = Nothing
Set clCtrlFilter2 = Nothing
Set FiltroMix = Nothing
End Sub
_________________________________________________________________
Private Sub Form_Open(Cancel As Integer)
' Empezamos por el objeto FiltroMix.
Inicio:
Set FiltroMix = New ClsFiltroMix
With FiltroMix
Set .CtrlTxtWhere = Me.txtWhere ' El cuadro de texto en el que se escribirá el filtro
End With
' Continuamos asignando propiadades a los distintos objetos clsControlFilter
Set clCtrlFilter = New clsControlFilter
With clCtrlFilter
.Alias = "PHYLUM" ' Los alias sólo son necesarios si queremos usar una fórmula
.tipoDato = dbInteger
Set .FiltroMix = FiltroMix ' Siempre tenemos que indicar en qué objeto clsfiltroMix
' mezclamos los controles
Set .ctrlFiltro = Me.phylum ' Indicamos el control cuyo contenido se
' usará como filtro.
.CampoaFiltrar = "id_phylum" ' por el contenido del control
End With
Set clCtrlFilter2 = New clsControlFilter
With clCtrlFilter2
.Enlace = y ' Opcionalmente, podemos hacer que un filtro se enlace con el anterior
' con un operador distinto de AND
.tipoDato = dbInteger
.Alias = "clase"
Set .FiltroMix = FiltroMix
Set .ctrlFiltro = Me.clase
.CampoaFiltrar = "id_clase"
End With
End Sub
____________________________________________________________________
Private Sub phylum_Click()
With clase
.RowSource = "select id_clase, clase from [Clase de Animal] where id_phylum =" & Me.phylum & " order by 2"
.Requery
End With
End Sub
____________________________________________________________________
Private Sub clase_Click()
With tipo
.RowSource = "select id_tipo, Nombre_animal_esp from Tipo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With GRUPO
.RowSource = "select id_grupo, grupo from grupo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With orden
.RowSource = "select id_orden, orden from Orden where id_clase =" & Me.clase & " order by 2"
.Requery
End With
End Sub
___________________________
No soy experta creando códigos lo que haga es buscar en internet y utilizarlos y modificarlos para lo que necesito.
Como verás en el último código, pertenece a la tabla clase que este filtra tres campo más. Ahora lo que quiero es usar otro filtro que lo lo captura el campo txtWhere y luego vamos a botón donde llama el formulario, pero cuando trato de filtrar por el campo id_clase me dice que "Puede que el campo [Id_clase] especificado haga referencias a más tabla de as mostradas en la cláusula FROM de la instrucción SQL."
Los datos los voy llenando en otra tabla que se llama especies., ¿Qué tengo que hacer?, por favor, Ayúdame!
Tendrás alguna otra forma que pueda filtrar los tres campo, yo lo he hecho de la siguiente forma.
Private Sub clase_Click()
With tipo
.RowSource = "select id_tipo, Nombre_animal_esp from Tipo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With GRUPO
.RowSource = "select id_grupo, grupo from grupo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With orden
.RowSource = "select id_orden, orden from Orden where id_clase =" & Me.clase & " order by 2"
.Requery
End With
End Sub
___________________________
Saludos,
Marilin
Necesito filtrar la tabla clase y me dice que no puedo filtrarla porque está relacionadas con otras tablas, estoy usando un código que me encontré en internet, que a continuación verás:
___________________________________________________________________
Option Compare Database
Option Explicit
'Un objeto clsControlFilter para cada control por el que queramos filtrar
Dim clCtrlFilter As clsControlFilter
Dim clCtrlFilter2 As clsControlFilte
Dim FiltroMix As ClsFiltroMix
_____________________________________________________________
Private Sub btnAbreForm_Click()
'Generamos el botón para abrir el formulario que filtramos usando el asistente
Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = Nz(Me.txtWhere) ' Sólo tenemos que asignar a mano el valor de txtWhere
stDocName = "registrar especies"
DoCmd.OpenForm stDocName, , , stLinkCriteria
End Sub
________________________________________________
Private Sub Form_Close()
Set clCtrlFilter = Nothing
Set clCtrlFilter2 = Nothing
Set FiltroMix = Nothing
End Sub
_________________________________________________________________
Private Sub Form_Open(Cancel As Integer)
' Empezamos por el objeto FiltroMix.
Inicio:
Set FiltroMix = New ClsFiltroMix
With FiltroMix
Set .CtrlTxtWhere = Me.txtWhere ' El cuadro de texto en el que se escribirá el filtro
End With
' Continuamos asignando propiadades a los distintos objetos clsControlFilter
Set clCtrlFilter = New clsControlFilter
With clCtrlFilter
.Alias = "PHYLUM" ' Los alias sólo son necesarios si queremos usar una fórmula
.tipoDato = dbInteger
Set .FiltroMix = FiltroMix ' Siempre tenemos que indicar en qué objeto clsfiltroMix
' mezclamos los controles
Set .ctrlFiltro = Me.phylum ' Indicamos el control cuyo contenido se
' usará como filtro.
.CampoaFiltrar = "id_phylum" ' por el contenido del control
End With
Set clCtrlFilter2 = New clsControlFilter
With clCtrlFilter2
.Enlace = y ' Opcionalmente, podemos hacer que un filtro se enlace con el anterior
' con un operador distinto de AND
.tipoDato = dbInteger
.Alias = "clase"
Set .FiltroMix = FiltroMix
Set .ctrlFiltro = Me.clase
.CampoaFiltrar = "id_clase"
End With
End Sub
____________________________________________________________________
Private Sub phylum_Click()
With clase
.RowSource = "select id_clase, clase from [Clase de Animal] where id_phylum =" & Me.phylum & " order by 2"
.Requery
End With
End Sub
____________________________________________________________________
Private Sub clase_Click()
With tipo
.RowSource = "select id_tipo, Nombre_animal_esp from Tipo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With GRUPO
.RowSource = "select id_grupo, grupo from grupo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With orden
.RowSource = "select id_orden, orden from Orden where id_clase =" & Me.clase & " order by 2"
.Requery
End With
End Sub
___________________________
No soy experta creando códigos lo que haga es buscar en internet y utilizarlos y modificarlos para lo que necesito.
Como verás en el último código, pertenece a la tabla clase que este filtra tres campo más. Ahora lo que quiero es usar otro filtro que lo lo captura el campo txtWhere y luego vamos a botón donde llama el formulario, pero cuando trato de filtrar por el campo id_clase me dice que "Puede que el campo [Id_clase] especificado haga referencias a más tabla de as mostradas en la cláusula FROM de la instrucción SQL."
Los datos los voy llenando en otra tabla que se llama especies., ¿Qué tengo que hacer?, por favor, Ayúdame!
Tendrás alguna otra forma que pueda filtrar los tres campo, yo lo he hecho de la siguiente forma.
Private Sub clase_Click()
With tipo
.RowSource = "select id_tipo, Nombre_animal_esp from Tipo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With GRUPO
.RowSource = "select id_grupo, grupo from grupo where id_clase =" & Me.clase & " order by 2"
.Requery
End With
With orden
.RowSource = "select id_orden, orden from Orden where id_clase =" & Me.clase & " order by 2"
.Requery
End With
End Sub
___________________________
Saludos,
Marilin
Respuesta de yescuder