Problema al acceder por VBA a una select

Tengo un problema con el siguiente código:
Public Function funcion1(variable)
    Dim RS As Recordset
    Dim SQL As String
    Set DB = CurrentDb
SQL = "SELECT tabla1.campo1 FROM tabla1 WHERE (((tabla1.campo2)=[variable])) ORDER BY tabla1.campo1"
    Set RS = DB.Openrecordset(SQL) 
rs.movelast
funcion1=rs.campo1
End Function
---------
La idea es luego poner esta función en una consulta de actualización para actualizar el campo1 de la tabla con los valores que me da la función.
El error que me sale al ejecutar la consulta es el siguiente en la siguiente linea del codigo: Set RS = DB.Openrecordset(SQL)
"Se ha producido el error '3061' en tiempo de ejecución: Pocos parámetros. Se esperaba 1"

1 Respuesta

Respuesta
1
Estás poniendo que el campo2 sea siempre "[variable]"
Lo que tienes que hacer es que la cadena contenga el valor de esa variable, no el nombre.
Prueba a sustituir la línea por esta:
SQL="SELECT campo1 FROM tabla1 WHERE campo2=" & variable & " ORDER BY campo1"
Verás que he quitado el 'tabla1. ' Al hacer referencia a los campos. Si sólo usas una tabla, ese 'prefijo' no es necesario y la instrucción se lee más fácilmente.
Si el campo2 es de tipo 'texto', tendrás que poner la variable entre comillas (con las sencillas es suficiente). La instrucción sería:
SQL="SELECT campo1 FROM tabla1 WHERE campo2='" & variable & "' ORDER BY campo1"
Hola, parece que ya me funciona pero una cosilla más sobre el mismo código:
No me funciona la siguiente expresion: funcion1=rs.campo1
"Se ha producido el error'438' en tiempo de ejecución: El objeto no admite esta propiedad o método"
Muchas gracias de antemano
Tienes razón, se me ha ido el dedo. Tiene que ser:
funcion1=rs!campo1
Cuando se hace referencia a un campo se separa por el carácter "!", si se hace referencia a una propiedad... entonces sí que se usa el punto.
Pero en este caso nos referimos al campo "campo1" que pertenece al recordset "rs".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas