Sentencia SQL (access) de registros seleccionados LISTBOX

Estoy intentando construir un informe en el que solo se muestren los registros correspondientes a los items seleccionados en un control listbox (selección múltiple).

Actualmente, el informe ya lo construyo asigándole su recordsource a partir de una consulta SQL (con código VBA) sobre el rowsource del LISTBOX en cuestión. La cuestión es si existe alguna forma de insertar a la actual sentencia SQL del informe un criterio para que solo muestre los registros seleccionados del cuadro de lista, pero manteniendo los criterios que ya tiene la SQL actual.

Uff!.

2 Respuestas

Respuesta
1

Eduardo: Suponiendo que en el indice 0 del RowSourde de la Lista, esté un Id Numérico.

Copia éste código en el evento Click del Formulario donde tengas tu ListBox.

Option Compare Database
Option Explicit
‘Hemos de tener una Tabla Temporal, ejemplo TblInformesTemp, con los campos necesarios
Dim I As Integer
Dim StrSQL As String
Dim Seleccion As Variant

Private Sub BtnImprimir_Click()
‘Borramos la Tabla Temporal
StrSQL = "DELETE TblInformesTemp.* FROM TblInformesTemp"

Call EjecutaConsulta

StrSQL = ""
'Determina cuales registros están marcados para ser impresos
For Each Seleccion In Lista.ItemsSelected

StrSQL = "INSERT INTO TblInformesTemp ( IdCliente, NombreCliente, NombreContacto, Telefono ) "
StrSQL = StrSQL & "SELECT Clientes.IdCliente, Clientes.NombreCliente, Clientes.NombreContacto, Clientes.Telefono "
StrSQL = StrSQL & "FROM Clientes WHERE Clientes.IdCliente = " & Me.Lista.ItemData(Seleccion) & ""
Call EjecutaConsulta
Next Seleccion
'Generamos el Informe
DoCmd.OpenReport "NombreInforme", acViewPreview
'Marcamos en la Tabla Clientes los registros ya impresos
For Each Seleccion In Lista.ItemsSelected
StrSQL = ""
StrSQL = "UPDATE Clientes SET Impreso = -1 WHERE Clientes.IdCliente = " & Me.Lista.ItemData(Seleccion) & ""
Call EjecutaConsulta
Next Seleccion
'Desmarco de la lista los registros que estan marcados
For I = 1 To Me.Lista.ListCount - 1
Me.Lista.Selected(I) = False
Next I
Me.Lista.Requery
End Sub
Sub EjecutaConsulta()
With DoCmd
.SetWarnings False
.RunSQL StrSQL
.SetWarnings True
End With
End Sub

Tendrás qe adaptar los Nombres y cantidad de Campos a lo que tu tengas en tu estructura. Saludos >> Jacinto

¡Gracias! con la idea de la tabla temporal para aislar los items seleccionados he daptado tu codifo y me esta funcionado bien (al menos las primeras pruebas)

Un saludo y muchas gracias

Respuesta

No se si es eso, pero me parece entender que, lógicamente, en el cuadro de lista eliges algo y quieres que el informe se abra sólo con los registros relacionados con el valor que has elegido. Es sencillo

En el evento Después de actualizar del cuadro de lista, entre Private Sub y End Sub pones

Docmd.openreport"nombre del informe",acpreview,,"idloquesea=forms!nombredelformulario!nombredelcuadro and Fechafactura between [escriba una fecha inicial] and [ahora otra final] and colorpelo=""rubio"" and...

O sea que en la instrucción de abrir el informe le puedes poner tantos criterios como quieras, a base de and, or, <>, is null, etc.

Lo de idloquesea es lo que relaciona lo que relaciona lo que eliges en el cuadro de lista con el informe, lo de fecha y color pelo es un ejemplo.

Si no es eso, pido disculpas

Perdona, acabo de leer lo de selección múltiple. No digo nada. Los domingos a las 10 no está uno para pensar mucho. Borra lo que he dicho.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas