Consulta de passthrough a través de DAO usando VBA: “Error 3131 Error de sintaxis en la cláusula FROM”
Copié una solución encontrada en Stack Overflow, adaptada a mis necesidades.
Public Function getAssortmentTypes(Optional personId As Variant) As DAO.Recordset 'personId es un entero
Dim strQuery As String
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
If IsMissing(personId) Then
strQuery = "SELECT assortment_type.type_id, assortment_type.type_name AS qryTest FROM assortment_type"
Else
strQuery = "SELECT * FROM get_non_deleted_assortment_types_by_user(" & personId & ")"
End If
Set qdf = CurrentDb.CreateQueryDef("")
With qdf
.SQL = strQuery
.Connect = getDBConnectionString
.ReturnsRecords = True
End With
Set rst = qdf.OpenRecordset
Debug.Print rst!qryTest
Set getAssortmentTypes = rst
End Function
En mi base de datos de PostgreSQL tengo una función funcional y tablas apropiadas. He probado consultas SQL con DBEaver y funcionan.
Recibo solo una fila (deberían ser aproximadamente 30) cuando llamo a la función sin un parámetro.
Con un parámetro, espero un conjunto de resultados filtrado pero recibo “Error 3131 Error de sintaxis en la cláusula ‘from'”.
davy.ai
El código VBA proporcionado parece estar utilizando DAO para ejecutar consultas SQL en una base de datos. El código incluye una función llamada
getAssortmentTypes
que recibe un parámetro opcional llamadopersonId
. Si falta elpersonId
, la función ejecutará una consulta SELECT en la tablaassortment_type
y devolverá un conjunto de registros con todos los registros de esa tabla. Si se proporciona elpersonId
, la función ejecutará una función almacenada llamadaget_non_deleted_assortment_types_by_user
que presumiblemente filtrará el conjunto de resultados en función del parámetro proporcionado.Según el mensaje de error recibido al llamar a la función con el parámetro, parece que la sintaxis de la consulta SQL generada por el código VBA es incorrecta. Específicamente, podría haber un problema con la cláusula
FROM
de la consulta SQL.Para investigar más el problema, se recomienda verificar la consulta SQL generada por el código VBA cuando se llama con un parámetro. Esto se puede hacer asignando la consulta SQL a una variable e imprimiéndola en la Ventana Inmediata usando la instrucción
Debug.Print
. Por ejemplo:Esto imprimirá la consulta SQL en la Ventana Inmediata cuando se llame a la función con un parámetro. Si la consulta SQL parece correcta, entonces el problema podría estar en la propia función almacenada.
También es posible que haya un error tipográfico o de sintaxis en la función almacenada o en cualquiera de las tablas utilizadas en la consulta. Verificar dos veces los nombres y la sintaxis de todos los objetos de la base de datos utilizados en el código VBA podría ayudar a identificar cualquier error.