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