Foros del Web » Soporte técnico » Ofimática »

Consulta interactiva en ACCESS II. Ayuda!!

Estas en el tema de Consulta interactiva en ACCESS II. Ayuda!! en el foro de Ofimática en Foros del Web. Hola a todos. La idea es hacer algo que ni tan siquiera sé si es posible hacerse. Si os parece, yo os digo lo que ...
  #1 (permalink)  
Antiguo 23/07/2008, 07:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
Pregunta Consulta interactiva en ACCESS II. Ayuda!!

Hola a todos.

La idea es hacer algo que ni tan siquiera sé si es posible hacerse. Si os parece, yo os digo lo que quiero hacer y a ver si a alguien se le ocurre cómo puede hacerse, ok?

La idea es que el usuario final escoja los parámeros de la consulta. Sería una consulta de parámetros pero que pueda decidir tambíén qué parámetros escoje. Me explico con un ejemplo mejor:

La consulta sería sobre una tabla "Ofertas_Cursos" y ahora se me ocurre, por ejemplo, en un formulario dos casillas de verificación, por ejemplo, "cliente" y "monitor" y dos campos de la tabla, 'cod_cliente' y 'nom_monitor'.
La cosa, es que el usuario pueda decidir entre estas opciones:

1.- Marca la casilla "cliente" y escoge un cliente. La consulta devolvería cursos impartidos para ese cliente.

2.- Marca la casilla "monitor" y escoge un monitor. La consulta devolvería cursos impartidos por ese monitor.

3.- Marca las casillas "cliente" y "monitor" y escoge cliente y monitor. La consulta devolvería cursos impartidos por ese cliente para ese monitor.

Lo suyo sería, que ni hicieran falta las casillas de verificación, que si no pongo nada por ejemplo en clientes, pues me filtre sólo por monitor. Pero no se si eso es posible, por eso se me ocurre lo de las casillas de verificación.

Este es un ejemplo con dos campos, pero la idea es que sean 5 ó 6 y las combinaciones que puede hacer el usuario sería mayores.

¿Puede hacerse esto?
¿Puede decirme alguien cómo se hace?
  #2 (permalink)  
Antiguo 23/07/2008, 08:25
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Se puede hacer lo que quieras (a casi). Un ejemplo, dos cuadros de texto, TxtCliente y txtCurso, en un form llamado form1. Una tabla con Cliente y Curso. La consulta seria tal que asi:

SELECT Cliente, Curso
FROM Tabla
WHERE Cliente Like [Formularios]![Form1]![TxtCliente] & "*" AND Curso Like [Formularios]![Form1]![TxtCurso] & "*";

Tambien puedes, a partir de una cosnulta "comodin", da igual su contenido, generar por cosido su sql recorriendo los controles y concatenando su contenido a una variable string, que asiganremos a la consulta por codigo. Ahora te pogo un par de ejemplos de consultas dinamicas.

Un saludo
  #3 (permalink)  
Antiguo 23/07/2008, 08:32
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Aqui van:

ejemplo1

Ejemplo2

Ejemplo3

Un saludo
  #4 (permalink)  
Antiguo 23/07/2008, 12:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Macho eres un Genio

Lo que necesito es exactamente el EjemploFiltroControles (Ejemplo 3). Sólo que necesito cambiar los controles de independientes a combos, para que seleccionen directamente el filtro de una lista. Supongo que puede hacerse no?

Ahora a ver si yo soy capaz de hacer lo mismo. Para coger todos los campos de la tabla puedo poner directamente "SELECT * FROM Ofertas_Cursos" verdad? lo digo por si cambia en Visual Basic (que como verás no controlo nada).

Solo una cosita, esto no genera una consulta real que después pueda tratar verdad? lo digo porque debería poder sacar un informe.

Como puedo hacer para que al hacer la consulta me genere un informe con los datos? o hacer un informe que se base en esa consulta que se crea al pulsar el botón?
  #5 (permalink)  
Antiguo 24/07/2008, 02:24
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Cita:
Iniciado por Piloto78 Ver Mensaje
Lo que necesito es exactamente el EjemploFiltroControles (Ejemplo 3). Sólo que necesito cambiar los controles de independientes a combos, para que seleccionen directamente el filtro de una lista. Supongo que puede hacerse no?
Puedes hacerlo perfectamente, pero los combos pueden seguir siendo indepenedientes, `pueden tener origen de la fila, lo que hara que se muestre una lista, pero no tenere origen de control (yo creo que es lo que necesitas), por tanto, son independientes.

Cita:
Iniciado por Piloto78 Ver Mensaje
Ahora a ver si yo soy capaz de hacer lo mismo. Para coger todos los campos de la tabla puedo poner directamente "SELECT * FROM Ofertas_Cursos" verdad? lo digo por si cambia en Visual Basic (que como verás no controlo nada).
Efectivamente, puedes hacerlo asi.

Cita:
Solo una cosita, esto no genera una consulta real que después pueda tratar verdad? lo digo porque debería poder sacar un informe.
Si, sobre una consulta (en este caso, ConsultaEjemplo), la modifica en funcion de lo que tu le indiques en el codigo, la puedes usar perfectamente.

Cita:
Como puedo hacer para que al hacer la consulta me genere un informe con los datos? o hacer un informe que se base en esa consulta que se crea al pulsar el botón?
Puedes hacer una un informe basado en esa consulta, no hay problema, siempre va a tenere los mismos campos, no??? De no ser asi, creo que tengo un ejemplo por ahi de un amigo para generar dinamicamente un informe, pero es algo complejo.

Un saludo
  #6 (permalink)  
Antiguo 24/07/2008, 02:39
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Cita:
Puedes hacerlo perfectamente, pero los combos pueden seguir siendo indepenedientes, `pueden tener origen de la fila, lo que hara que se muestre una lista, pero no tenere origen de control (yo creo que es lo que necesitas), por tanto, son independientes.
Es eso a lo que me refería exactamente.

Cita:
Puedes hacer una un informe basado en esa consulta, no hay problema, siempre va a tenere los mismos campos, no??? De no ser asi, creo que tengo un ejemplo por ahi de un amigo para generar dinamicamente un informe, pero es algo complejo.
No te preocupes, el informe siempre tendrá los mismos campos.

Gracias. Me pongo ahora mismo a ver como me sale.
  #7 (permalink)  
Antiguo 24/07/2008, 03:31
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
Pregunta Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Me da
Cita:
error '3265'
No se encontró el elemento en esta coleccion
Y cuando le doy a depurar me marca esta linea:
Cita:
TipoDatos = CurrentDb.TableDefs(Me.RecordSource).Fields(Nombre Control).Type
¿Que está fallando?
  #8 (permalink)  
Antiguo 24/07/2008, 03:50
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Cuando te da ese error?? Donde?? Que estas intentando??

Un saludo
  #9 (permalink)  
Antiguo 24/07/2008, 04:51
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Ja ja ja! A saber lo que estoy intentando hacer!

Básicamente he copiado lo que tu has puesto en tu código. He creado un formulario con 4 combos y una casilla de verificación por probar.
Despues creo un boton y al hacer clic, genero el siguiente código:
Cita:
Private Sub Comando5_Click()
Dim NombreControl As String
Dim Ctl As Control
Dim Filtro As String
Dim TipoDatos As String
Dim qdf As DAO.QueryDef
Dim sSql As String


sSql = "SELECT * FROM Ofertas_Cursos "


For Each Ctl In Me.Controls
NombreControl = Ctl.Name

If Me.Controls(NombreControl).ControlType = acTextBox Or _
Me.Controls(NombreControl).ControlType = acComboBox Or _
Me.Controls(NombreControl).ControlType = acCheckBox Then
If Nz(Me.Controls(NombreControl), "") <> "" Then
If Nz(Filtro, "") <> "" Then Filtro = Filtro & " AND "
TipoDatos = CurrentDb.TableDefs(Me.RecordSource).Fields(Nombre Control).Type

Select Case TipoDatos
Case 1, 4, 5 'si/no,moneda,numerico
Filtro = Filtro & NombreControl & "=" & Me.Controls(NombreControl).Value
Case 10 'texto
Filtro = Filtro & NombreControl & "='" & Me.Controls(NombreControl).Value & "'"
Case 8 'fecha
Filtro = Filtro & NombreControl & "=#" & Format(Me.Controls(NombreControl).Value, "mm/dd/yyyy") & "#"
End Select
End If
End If
Next Ctl

If Nz(Filtro, "") <> "" Then
Set qdf = CurrentDb.QueryDefs("ConsultaInteractiva")
qdf.SQL = sSql & " Where " & Filtro
DoCmd.OpenQuery "ConsultaInteractiva"
Else
MsgBox "Ninguno de los controles ha sido rellenado", vbInformation
End If
End Sub
Creo que sólo he cambiado el nombre de la consulta y el SELECT.

En cuanto pulso el botón me sale ese error. Aunque si no escojo ninguna opción, me sale bien el MsgBox, así que al menos eso me sale bien... ja jaja!

Por cierto se podría añadir para que me filtrara por mes??

Gracias.
  #10 (permalink)  
Antiguo 24/07/2008, 07:31
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Vale, es que el ejemplo es un poco especial. Observa que los controles tienen el mismo nombre que los campos a filtrar, es decir, el primer cuadro de texto del formulario se llama IdPersonal, y se corresponde con el nombre del campo de la tabla al que se le va a palicar ese filtro. Puedes hacerlo asi, o ir contruyendo el filtro, como solo eran 5 o 6 controles, no sera complicado. Preuba lo que te digo, si no, dime los nombres de los campo a filtrar, los tipos de dato de cada uno, los nombres de los controles del form, y preparamos el filtro en un momento.

Un saludo
  #11 (permalink)  
Antiguo 24/07/2008, 07:54
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Pues no termino de entenderlo, porque creo que en mi caso también está así. De todas formas, aqui tienes la info:

Tengo puestos 4 combos: nom_curso, nom_cliente, provincia_curso y monitor. Estos se corresponden con 4 campos de la tabla Ofertas_Cursos que se llaman exactamente igual y sus tipos de datos son "texto" en los cuatro.
Además hay una casilla de verificacion que se llama horario_mañana tanto en el form como en la tabla y su tipo de dato es "Si/No"

En cuanto a lo del informe, qué comando tengo que poner, para que además de la consulta, me abra el informe al pulsar el boton?

Gracias.
  #12 (permalink)  
Antiguo 24/07/2008, 08:14
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Prueba esto a ver si cuela:

Private Sub Comando5_Click()
Dim Filtro As String
Dim qdf As DAO.QueryDef
Dim sSql As String

sSql = "SELECT * FROM Ofertas_Cursos "


If Nz(Me.nom_curso, "") <> "" Then
Filtro = Filtro & " nom_curso='" & Me.nom_curso & "' AND "
End If
If Nz(Me.nom_cliente, "") <> "" Then
Filtro = Filtro & " nom_cliente='" & Me.nom_cliente & "' AND "
End If
If Nz(Me.provincia_curso, "") <> "" Then
Filtro = Filtro & " provincia_curso='" & Me.provincia_curso & "' AND "
End If
If Nz(Me.monitor, "") <> "" Then
Filtro = Filtro & " monitor='" & Me.monitor & "' AND "
End If
If Not IsNull(Me.horario_mañana) Then
Filtro = Filtro & " monitor=" & Me.monitor & " AND "
End If


If Nz(Filtro, "") <> "" Then
Filtro = Left(Filtro, Len(Filtro) - 4)
Set qdf = CurrentDb.QueryDefs("ConsultaInteractiva")
qdf.SQL = sSql & " Where " & Filtro
'DoCmd.OpenQuery "ConsultaInteractiva"
'y esto para abrir el informe, que tendra como origen la consulta ConsultaInteractiva
DoCmd.OpenReport "nombreInforme", acViewPreview

Else
MsgBox "Ninguno de los controles ha sido rellenado", vbInformation
End If
End Sub

Un saludo
  #13 (permalink)  
Antiguo 24/07/2008, 08:17
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Me explico mejor con lo del informe:

Uno sería sobre esta consulta, pero tengo que sacar algunos más, para verlo más fácil, pongo un ejemplo de otro:

Tengo un botón para generar un informe resumen para el monitor para un curso determinado. La consulta es sencilla, pongo los campos que quiero en el resumen y según el id_curso que le ponga pués me sacará el informe del curso en cuestión.
Por otra parte puedo hacer el informe, basado en esa consulta.

Pero cómo hago, para que al pinchar en el botón, coja el id_curso (es uno de los campos del form en el que está el botón) lo mande a la consulta, y me genere el informe de dicha consulta?

Espero haberme explicado mejor ahora.

Gracias.
  #14 (permalink)  
Antiguo 24/07/2008, 08:26
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Igual te vale con aplicar el filtro que indicas en la apertura del informe, seria asi:

DoCmd.OpenReport "nombreInforme", acViewPreview, , "id_curso='" & Me.id_curso & "'"

Si id_curso fuera numerico, y no de texto, quita lo rojo.

Un saludo
  #15 (permalink)  
Antiguo 24/07/2008, 08:39
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Parece que no ha colado. Me da el mismo error de antes, pero ahora al depurar me marca esta otra línea:
Cita:
Set qdf = CurrentDb.QueryDefs("ConsultaInteractiva")
de momento no voy a poner la línea de código en la que abres el informe, porque lo estoy creando ahora mismo, no vaya a fallar por ahí ahora.

La ConsultaInteractiva la crea el propio código no? no tendrá que estar creada con anterioridad? si es así no está creada.
  #16 (permalink)  
Antiguo 24/07/2008, 08:44
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Pues hay esta el error, tiene que estar creada, da igual su contenido, pon cualquier cosa, por codigo la cambiamos, pero debe existir fisicamente y con ese nombre (o el que tu quieras)

Un saludo
  #17 (permalink)  
Antiguo 24/07/2008, 09:54
 
Fecha de Ingreso: mayo-2008
Mensajes: 80
Antigüedad: 16 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Consulta interactiva en ACCESS II. Ayuda!!

Ahora sí.

Ya he habilitado también la línea de código que saca el informe y también funciona a la perfección.
Muchísimas gracias de nuevo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:09.