Access integrar dos códigos para filtrar resultados

Les comento tengo un campo idConcepto que al hacer doble click abre otro formulario

La idea mía es abrir el otro formulario filtrado por otro campo

Puedo completar el proceso colocando un botón en el Formulario F_ConceptoPorTipoMov y aplicar el filtro con este código

Private Sub Texto6_DblClick(Cancel As Integer)
Lista1.RowSource = "SELECT T_Concepto.Id, Concepto, T_TipoMov.Id, TipoMovimiento FROM C_Conceptos_por_TipoMov where T_TipoMov.Id = Texto6.Text Order By Concepto;"
End Sub

Pero al querer integrarlo con este me da error y no se como solucionarlo

Private Sub idConcepto_DblClick(Cancel As Integer)
DoCmd.OpenForm "F_ConceptoPorTipoMov"
Dim VID As Variant
VID = Forms!F_Movimientos.IdMovTipo
If CurrentProject.AllForms("F_ConceptoPorTipoMov").IsLoaded Then
Forms!F_ConceptoPorTipoMov.Texto6 = VID
Forms!F_ConceptoPorTipoMov.Lista1.RowSource = "SELECT T_Concepto.Id, Concepto, T_TipoMov.Id, TipoMovimiento FROM C_Conceptos_por_TipoMov where T_TipoMov.Id = Texto6.Text Order By Concepto;"
Exit Sub
End If
End Sub

2 Respuestas

Respuesta
1

Esa consulta no pe parece correcta, parece que toma datos de varias tablas: T_Concepto, T_TipoMov, C_Conceptos_por_TipoMov (esta última para los campos 'sin apellido').

Para que tome datos externos (Texto6.Text ) es indispensable que el objeto texto6 este 'fuera' del texto y tenga el foco (o no podrá acceder a su propiedad TEXT ya que solo existe en tiempo de ejecución y para el objeto activo si la admite).

Deduzco que al no poder acceder al referente externo (Texto6.Text) no podrá aplicar la condición (la ignorará) y devolverá 'algo' que a efectos prácticos es utilizable.

Si se comienza con esta línea:

DoCmd.OpenForm "F_ConceptoPorTipoMov"

Siempre se cumplirá esta otra:
If CurrentProject.AllForms("F_ConceptoPorTipoMov").IsLoaded Then

La primera línea abre el formulario (si es que no está abierto con anterioridad) por lo que se peca de desconfiado con la verificación innecesaria.

Se continua con el mismo error conceptual de la primera SQL al utilizar elementos externos sin relacionar (las tablas T_Concepto + T_TipoMov) y el error en el acceso a la referencia Texto6 que ya no es el objeto activo (ahora lo es idConcepto) por lo que tampoco estará disponible su propiedad Text.

Muchas gracias Enrique por la explicación

Como veras mis conocimientos son rudimentarios. Pero tu explicacion fue muy clara. Solo bastaba con que el campo "texto6 este 'fuera' del texto y tenga el foco" para lograr lo que deseaba.

Elimine la parte que tambien tenia la verificacion innecesaria.

Gracias de nuevo por tu claridad al explicar.

¿Por qué se utiliza la propiedad 'Text' del objeto?

El que exista solo cuando 'tiene el foco' es porque en esa propiedad (y en tiempo de ejecución) se guardan de forma temporal los caracteres que se van tecleando.

Es útil para consultar lo que se va tecleando utilizando eventos como 'al bajar una tecla o change o ...
Pero en el evento doble click tomara el valor que exista en su propiedad 'Value' que se habra actualizado con el nuevo valor (OldValue = Value ===>>  Value =Text), ya no será necesario que tenga el foco y se podrá consultar su valor en eventos de otros objetos.

Lo utilizaría así si texto6 es un valor numérico:

....... where T_TipoMov.Id = " & Me.Texto6 & " Order By Concepto"

Lo utilizaría así si texto6 es un valor alfanumérico (texto):

....... where T_TipoMov.Id = '" & Me.Texto6 & "' Order By Concepto"
Respuesta

¿Podrías poner unas imágenes? Es para saber de donde viene cada cosa, ya que me sorprende que uses un Id de la tabla T_Concepto, luego Concepto( se supone que también de la misma tabla), luego le dices un Id de la tabla T_tipomov...

Cuando se van a usar campos de dos tablas conviene usar

Select...from TablaA inner join.....

Gracias por responder Julián,

Siento retrasarme, pero no me expresé bien, me refería a vista formulario. Por ejemplo, tengo un formulario Compradores, que le pongo color para que veas que está abierto, por lo que como bien te dicen, no necesitas el If current...

Puedes ver que el control Precio está vacío, no es que sirva para algo, pero... Si pulso el botón Abrir, me abre el formulario Países en vista diálogo, pero puedes ver que Compradores sigue abierto.

Ahora voy a filtrar los países por una cadena que escriba( tampoco sería necesario) en el combinado. Escribo SP y me filtra sólo aquellos países que tengan SP en su nombre

Me voy al registro que quiera, en este caso al segundo y pulso la casilla de verificación y escribo una cantidad(observa que el Idpais el el 22). Al pulsar el botón

En el control Precio del formulario Compradores me pone esa cantidad( aunque no sé si sirve para algo) y por otro lado

Me actualiza el campo Precio de la tabla Compradores en aquel registro que tenga como Idcliente( el 22) el mismo valor que el IdPais del formulario Paises que acabo de usar.

Y el código del formulario Paises es mucho más sencillo.

En el caso del combinado, que podría ser un cuadro de texto o un cuadro de lista

Private Sub BuscaPais_AfterUpdate()
Me.RecordSource = "select * from paises where pais Like ""*""&'" & Me.BuscaPais & "'&""*"""
End Sub

Y en el caso del botón

Private Sub Comando13_Click()
If Verificación14 = -1 Then
Forms!compradores!Precio = CantidadPasar
DoCmd.RunSQL "update compradores set precio=cantidadpasar where idcliente=" & Me.IdPais & ""
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas