Tengo que hacer una consulta sobre una tabla donde tengo un campo con diferentes valores. Al ejecutarse, la consulta tiene que pedir unos parámetros que cojan el operador OR (tipo: "libros or revistas") pero no consigo que lo coja. He probado ha hacerlo poniendo que pida un numero determinado de veces el parámetro y poniendo yo el OR en el diseño de la consulta pero tengo el problema que no se si cuando ejecute necesito poner un solo parámetro, cinco o diez. En teoría querría que vaya pidiendo parámetros hasta que introduzca uno en blanco y entonces ya no pida más. ¿Cómo puedo hacerlo?
Lo que no me queda claro es si lo que quieres es hacer la consulta directamente; es decir, que al hacer doble click sobre una consulta ésta pida los parámetros y muestre los datos, O bien, hacer una consulta que vas a utilizar por código o dentro de un formulario, etc... Concrétame cual de los dos casos es el que te interesa y te indico. De todos modos, te adelanto que Access utiliza los formularios para "introducir parámetros" y mostrar los datos oportunos, por lo que cualquier otra opción de hacerlo directamente en la consulta sin usar formularios no es la manera apropiada de hacerlo, ademas de ser complicado hacer de ese modo lo que tu quieres. Espero tu respuesta al respecto y te indico como conseguirlo, ok ¿? Encantado de poderte ayudar.
Hola de nuevo. Lo que quiero hacer es la consulta directamente (hacer doble clic). Si no se pudiera hacer así, ¿cómo lo tendría que hacer? ¿Por formularios? Gracias por contestar porque ya no sabia que hacer.
Si, como dices, lo quieres hacer desde una consulta directamente al hacer click, no tendrías más opción que saber el número de parámetros que se podrían introducir y solicitar uno a uno hasta completar todos los posibles; es decir, fijar en POR los posibles valores para el criteri del determinado campo y preguntar por los POR parámetros, vayan o no en blanco. El motivo es muy sencillo, y es que en una consulta no puedes utilizar determinadas funciones o procedimientos de código que te permitirían comprobar, entre otras cosas, que el parámetro esta en blanco para no preguntar por más, ni tampoco podrías dejar variable el numero de parámetros dependiendo de cuantos se introduzcan, etc... Lo que yo te propongo es otra cosa: ¿Qué te parece si en lugar de hacer doble click en una consulta lo haces en una macro y ésta te muestra en pantalla los datos que quieras tras pedirte los parámetros como lo haría la consulta? Supongo que bien, no ¿? Es como lo que quieres, solo que en lugar de hacer doble click en una consulta lo harías en una macro... Para hacer esto, sigue los siguientes pasos: - Crea un modulo (o utiliza uno que ya tengas) - Copia en él la siguiente función: Function TuConsulta() Dim dbs As Database, qdf As QueryDef Dim strSQL As String Dim Variable As String ' Devuelve la referencia a la base de datos activa. Set dbs = CurrentDb ' Actualiza la colección QueryDefs. dbs.QueryDefs.Refresh ' Si existe la consulta ConsultaTemporal, la elimina. For Each qdf In dbs.QueryDefs If qdf.Name = "ConsultaTemporal" Then dbs.QueryDefs.Delete qdf.Name End If Next qdf ' Crea una cadena SQL con la consulta deseada pidiendo parámetros 'hasta que el dato devuelto sea blanco o se pulse en cancelar Do Variable = InputBox("Introduzca el parametro:", "PARAMETROS") If Variable = "" Or IsNull(Variable) Then Exit Do Else strSQL = strSQL & Variable & ", " End If Loop 'Formamos la sentencia SQL completa, teniendo en cuenta los parámetros anteriores '¡ Aquí debería ir tu sentencia SQL ! strSQL = "SELECT * FROM TABLA WHERE CAMPO IN(" & Mid$(strSQL, 1, Len(strSQL) - 2) & ")" ' Crea un objeto tipo consulta llamado ConsultaTemporal con la sentencia anterior Set qdf = dbs.CreateQueryDef("Pruebas", strSQL) ' Abre la consulta en la vista Hoja de datos. DoCmd.OpenQuery qdf.Name 'Elimina la consulta creada anteriormente dbs.QueryDefs.Delete qdf.Name 'Libera la variable objeto Set dbs = Nothing End Function - Grabalo y abre una Macro nueva. - La Macro debe hacer lo siguiente: Ejecutar Código y el código a ejecutar sera "TuConsulta ()" - Grabalo y haz doble click en la Macro... Ya tienes lo que querías... Al hacer doble click en la Macro se ejecuta la función que te pide los parámetros hasta que introduzcas un blanco o pulses en cancelar. Un vez introducidos, la función crea una consulta con los parámetros que has introducido, te muestra el resultado en pantalla y elimina esa consulta recién creada, ya que no te hace falta al tenerla en pantalla (si quisieras modificar datos o demás de esa consulta, elimina la linea de código que borra la consulta). Espero que esto te solucione el problema. Lo único, en lo que te planteo, es que debes saber como formar la sentencia SQL. Si sabes hacerla, no tendrás mayor problema. Si tienes algún otro problema o consulta no dudes en contactarme de nuevo.
- Anónimoahora mismo
2 respuestas más de otros expertos
Respuesta de roypasr
1
1
roypasr, Aplicaciones Access, y ofimatica en general
Supongamos que tienes libros, revistas, tebeos y cuadrenos. Si siempre vas a seleccionar dos tipos podrías poner en criterios: [introduce criterio1]or[introduce criterio2] Así te saldrán los coincidentes con esos dos criterios. Si son 3 pues tres entrecorchetes. Si unas veces son dos y otras tres, y otras cuatro... Pues así a bote pronto no se me ocurre como, pero seguro que algo sale. Mira a ver si con esto te vale Suerte
En una consulta no podrás más que pedir POR parámetros... y siempre X... Deberás acudir a código (¿qué tal se te da?) Y montar un bucle que saque ventanitas hasta que metas una en blanco, con ese bucle podrías crear un SQL con la opción: in ("libros","revistras",...) Creo que 'in' te sirve mejor que el or para tu problema... Si no conoces el código creo ue es complicado que te ayude, más probablemente te meteré en un buen lío...
Ya he mirado el código pero quiero crear un bucle con SELECT CASE pero el código no me lo coge o no se ponerlo bien. Con un IF lo he probado pero no funciona bien. Mirare el IN que comentas a ver que tal A ver si me echas un cable.
pero no se si te entiendo... ¿el bucle lo haces por código? qué haces dentro del bucle (porque con select case no lo veo)... Yo me refiero a: un string con tu consulta SQL "select * from tal where tipo in ('" ahora un bucle que saque msgbox y rompa cuando la respuesta sea "" while respuesta<>"" respuesta=msgbox("tipo ") if respuesta<>"" then misql=misql & ",'" & respuesta & "'" endwhile Al salir del bucle cierras la sentencia SQL misql=misql & "')" Y ejecutas el sql Docmd. Runsql misql Suerte