es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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'”.

Tags:  , , ,

Answer

  1. Avatar for 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 llamado personId. Si falta el personId, la función ejecutará una consulta SELECT en la tabla assortment_type y devolverá un conjunto de registros con todos los registros de esa tabla. Si se proporciona el personId, la función ejecutará una función almacenada llamada get_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:

    strQuery = "SELECT * FROM get_non_deleted_assortment_types_by_user(" & personId & ")"
    Debug.Print strQuery
    

    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.

Comments are closed.