stored permission permisos sql-server ms-access stored-procedures

sql-server - permission - sql server grant execute stored procedure to user



Error "declaración SQL no válida" al intentar ejecutar el procedimiento almacenado de SQL Server desde Access (2)

No tengo acceso ahora a MS-Access, pero me parece que la buena sintaxis es:

`strSQL = "exec [HS].[spGetXMLExtract]" With CurrentDb.QueryDefs(strSQL) ''Fill parameters .Parameters(0) = My first param .Parameters(1) = My 2nd param .Parameters(2) = My last param ''Execute the query .Execute End With `

Espero que le ayudará !

Estoy operando en una máquina virtual donde se sientan mi servidor SQL y MS Access. Configuré una conexión ODBC de Access to SQL y vinculé algunas tablas. Puedo realizar las operaciones habituales en estas tablas (seleccionar / actualizar, etc.).

PERO, ¡no puedo ejecutar un procedimiento almacenado por alguna extraña razón! El procedimiento funciona perfectamente en SSMS, pero no cuando lo llamo desde Access VBA. A continuación está el código que estoy usando para ejecutar el proceso (también necesito pasar 3 parámetros, pero lo he excluido del código a continuación por simplicidad):

With CurrentDb.QueryDefs("qPass") .SQL = "exec [HS].[spGetXMLExtract]" .Execute End With

El error devuelto por MS Access es

Instrucción SQL no válida: se espera ''DELETE'', ''INSERT'', ''PROCEDURE'', ''SELECT'' o ''UPDATE''.

No sé si esto está sucediendo porque: 1. Tengo estas aplicaciones en una VM; y / o 2. De alguna manera, debo vincular el procedimiento almacenado a MS Access tal como lo hice para las tablas (quizás esto no se pueda hacer).

Creo que hay métodos intrincados que "podría" adoptar, pero no quiero. Ejemplo:

1. Cree una tabla en SQL con columnas que almacenan los parámetros; Escribir un AFTER UPDATE en esa tabla que ejecuta mi procedimiento almacenado; Inicie una consulta de ''Actualización'' desde MS Access que actualizaría los parámetros en esa tabla y luego se dispararía un disparador de SQL. O;

2. Elimine completamente el procedimiento almacenado de la ecuación y ejecute sus instrucciones individuales (seleccionar / actualizar / insertar, etc.) a través de un Sub en MS Access. Sin embargo, no sé si esto causaría problemas al crear tablas temporales.

¿Puede alguien por favor asesorar sobre esto, este es un verdadero bloqueador!

¡Gracias por adelantado!


Recibirá ese mensaje de error si QueryDef no tiene una cadena de conexión "ODBC;..." válida como su propiedad .Connect . Así es como Access identifica el QueryDef como una consulta de paso a través.

Si ya tiene definida una tabla vinculada con ODBC, puede usar su valor de propiedad .Connect para la propiedad .Connect de QueryDef, así:

Dim cdb As DAO.Database Set cdb = CurrentDb Dim qdf As DAO.QueryDef Set qdf = cdb.CreateQueryDef("") qdf.Connect = cdb.TableDefs("dbo_table1").Connect '' grab .Connect string from linked table qdf.sql = "exec [HS].[spGetXMLExtract]" qdf.ReturnsRecords = False qdf.Execute

... o, si el procedimiento almacenado devuelve un conjunto de resultados:

Dim cdb As DAO.Database Set cdb = CurrentDb Dim qdf As DAO.QueryDef Set qdf = cdb.CreateQueryDef("") qdf.Connect = cdb.TableDefs("dbo_table1").Connect '' grab .Connect string from linked table qdf.sql = "exec [HS].[spGetXMLExtract]" qdf.ReturnsRecords = True Dim rst As DAO.Recordset Set rst = qdf.OpenRecordset(dbOpenSnapshot) Do Until rst.EOF '' do stuff rst.MoveNext Loop rst.Close