Access - ¿Como asignar a una RowSource una Consulta sql con Parametros?

   
Vista:

¿Como asignar a una RowSource una Consulta sql con Parametros?

Publicado por Juan (9 intervenciones) el 29/05/2014 13:07:38
Hola,

Estoy trabajando con una base de datos MS-Access 2010. Tengo un formulario con una combo cuya propiedad "RowSource" va cambiando según valores de otros controles del mimo formulario. Esta asignación la hago desde el código escrito en VB.

El valor asignado a RowSource es una sentencia SELECT contra tablas en la misma BD Access 2010.
Se da el caso que la sentencia SELECT se ha hecho tan larga que ya no es aceptada por la propiedad RowSource.

Para salir del paso he creado una "Consulta-Access" tipo SELECT para posteriormente poder utilizar el nombre de esta consulta en la propiedad "RowSource".
Con este truco resuelvo el problema de la limitación de "select demasiado larga" en el RowSource, pero para que la solución sea totalmente funcional, necesitaría que la "Consulta-Access" admitiera parámetros de entrada para que la SELECT no devuelva siempre el mismo resultado.

Ejemplo simplificado de una "Consulta-Access" con parámetro como la que he creado:
1
2
3
4
PARAMETERS [miParametro1] Long;
SELECT Fecha, Importe, Nombre
FROM miTabla
WHERE [miTabla].[Importe] = [miParametro1]


Asignar el nombre de la consulta-access a la propiedad RowSource de la combo box (miCombo.RowSource = "NombreConsulta") permite que la consulta-access se ejecute (al ejecutar miCombo.Requery ), pero primero me sale un mensaje de pop-up solicitando un valor para el parámetro de la consulta-access.

¿Cómo puedo asignar un valor al parámetro y con esto evitar que salga este mensaje de pop-up?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿Como asignar a una RowSource una Consulta sql con Parametros?

Publicado por Jefferson (381 intervenciones) el 30/05/2014 05:22:43
Hola Juan

miCombo.RowSource = "NombreConsulta" ????????
Access no sabe lo que le dices, quien es "NombreConsulta" ?????
debes declarar una variable string o variant y se la pasas al rowsource..!

y supieras que jamas en mi poca experiencia con VBA me ha salido este error "select demasiado larga"
y creeme que he creado consultas en VBA tan largas que me pierdo al leerlas..

si tienes un poco de problemas al crear consultas en tiempo de ejecucion a VBA quizas te sirva aplicar una ayuda al respecto https://sites.google.com/site/jjjt1973/de-sql-a-vba-access

Desde Venezuela
Jefferson Jimenez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como asignar a una RowSource una Consulta sql con Parametros?

Publicado por Juan (9 intervenciones) el 30/05/2014 12:04:08
Gracias por interesarte por mi consulta.

Creeme, el siguiente código ejecuta y rellena el combo con una Consulta-Access almacenada con el nombre NombreConsulta.

1
2
miCombo.RowSource = "NombreConsulta"      'String que indica el nombre de la consulta 
miCombo.Requery                          'Para que se ejecute la consulta y se llene la combo.

El problema por el que solicito ayuda en el foro es porque en este caso la consulta tiene parámetros definidos (en el ejemplo simplificado he puesto código con un solo parámetro). Esto hace que la ejecución de la consulta empiece mostrando una ventana (esto lo hace el propio Access sin que yo programe nada) para que se indique el valor del parámetro.

Lo que yo necesito es saber si es posible asignarle el valor del parámetro por código y evitar así que la consulta muestre la ventana solicitando su valor. Algo así como llamar a una función indicando el nombre de la función y los valores de los parámetros de esta.

Entretanto, he "disuelto" el problema eliminando el parámetro y sustituyendo éste en la consulta por la referencia a un campo del formulario que tiene el valor que yo quiero pasar como parámetro. La consulta queda algo así como:

1
2
3
4
PARAMETERS [miParametro1] Long;
SELECT Fecha, Importe, Nombre
FROM miTabla
WHERE [miTabla].[Importe] = [Formularios]![NombeFormulario]![NombreCampoFormulario]

La solución hace lo que debe, pero no me gusta porque el código de la consulta no es reutilizable (por ejemplo para otro formulario que necesite hacer lo mismo).

Jefferson , gracias por el aporte.

PD: Foreros, cualquier sugerencia de mejora a mi "txapucilla" será bienvenida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como asignar a una RowSource una Consulta sql con Parametros?

Publicado por Jefferson (381 intervenciones) el 31/05/2014 06:42:32
Ok Pero creo eres algo parco en formular tu pregunta (aparte crea ambiguedad, pues no logre enfocar que deseabas)

Con este codigo creo te orientas para reutilizarlo (Claro siempre tendras que escribir y/o copar-pegar de sql a vba)

1
2
3
4
Function Consulta(NameForm, CampoFormulario As String)
Consulta = "SELECT Fecha, Importe, Nombre " & _
"FROM miTabla WHERE [miTabla].[Importe] = [Formularios]!" & "[" & NameForm & "]![" & CampoFormulario & "]"
End Function


Desde Venezuela
Jefferson
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar