Cómo llevar variables a consultas SSQL

Desearía saber como llevar variables a consultas sql. Me explico: Soy modesto aficionado a hacer programitas con access y vba. Muchas veces me tengo que apoyar en consultas para efectuar algún proceso. Esas consultas las hago con el asistente de access y después las ejecuto con el comando runsql. Mi problema es que a veces defino variables de control mediante la instrucción Dim, y esas variables definidas no las sé llevar directamente a la consulta. Tengo que crear un cuadro de texto al que asigno el valor de la variable, y ese cuadro de texto sí me lo admite el asistente de consultas.

Realmente haciendo esto se me resuelve el problema, pero si los procesos son grandes tengo que llenar el formulario con el que trabajo de cuadros de texto (que hago invisibles) por no saber cómo trasladar directamente las variables a las consultas Sql.

¿Alguien puede echarme un cable?

1 respuesta

Respuesta
2

A ver si consigo explicarme:

Directamente no puedes llevar el valor de una variable definida en VBA a un objeto consulta de Access (una consulta que te aparece en el panel de navegación).

Dicho esto, tienes formas de hacer lo que quieres sin necesidad de llenar tus formularios con cuadros de textos ocultos:

1º/ Crear funciones públicas que recojan los valores de esas variables (que también deben ser públicas, es decir, declararlas con Public a nivel de módulo y no con Dim dentro de un procedimiento). Por ejemplo, en un módulo:

Public vNombre As String
Public fncNombre() As String
fncNombre=vNombre
End Function

En tu procedimiento le asignas el valor a la variable:

vNombre=Me.CampoNombre

Y en tu consulta usas la función, por ejemplo para filtrar, te quedará esta SQL:

SELECT * FROM TuTabla WHERE Cliente=fncNombre()

2º/ Usar Variables temporales en vez de declarar variables a nivel de procedimiento: http://neckkito.xyz/nck/index.php/manuales/258-tempvars-variables-temporales 

3º/ "Pasar" de guardar la consulta como objeto y crearla y ejecutarla vía código:

Dim miSQL as String
Dim miNombre As String
vNombre=InputBox("Escribe el nombre del cliente a actualizar")
miSQL="UPDATE TuTabla Set Descuento=0.25 WHERE Cliente='" & vNombre & "'"
DoCmd. RunSQL miSQL

Habría otras opciones que ya no te explico en detalle, como crear por código la SQL, crear y guardar la consulta como objeto en la BD, ejecutarla como hasta ahora y luego borrarla.

Pero yo si fuera tu, optaría por usar las variables temporales como primera opción, ya que así puedes aprovechar las consultas que ya tienes, simplemente cambiando las referencias a los campos ocultos por las variables temporales que crees.

Un saludo.


¡Gracias! . En cuanto pueda lo miro

He avanzado muchísimo gracias a tu recomendación de usar variables temporales.

A veces tengo problemas al asignar a las TempVars valores alfanuméricos o fechas. ¿Tienes idea de por qué se produje esto?

Por ejemplo tengo un cuadro combinato que genera valores como TOD, NYU, USU y NPR. Al asignarlo a una tempvars me detiene la ejecución del código. Probablemente será cuestión de ortografía, pero no acabo de dar con la instrucción adecuada.

Con valores alfanuméricos, ni idea de por qué te pasa eso, porque no deberías tener problemas (salvo que uses caracteres "raros", espacios en blanco o nombres reservados, que parece que no es el caso).
Con las fechas puede ser un problema de formato, si la usas en código o directamente en una SQL, el formato que "entiende" al ejecutarse es el americano (mm/dd/yyyy).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas