Controlar errores en Stored Procs.

01/02/2007 - 13:48 por Juan Martínez | Informe spam
Hola: Estoy atacando un SP de SQL Server 2000 desde una aplicación VB6 en el
que ejecuto sentencias como:
DECLARE @sql nvarchar(4000)
set @sql='UPDATE tabla SET campo1='ww''
EXEC sp_executesql @sql

Es algo más complicado, con parámetros de entrada que componen @sql para los
nombres de las tablas a actualizar, etc. La cuestión es que si yo hago por
ejemplo:

set @sql='UPDATE error en la sintaxis de la sentencia SQL'
EXEC sp_executesql @sql

No se como detectar el error bien desde el objecto connection de ADO o bien
desde el objeto parameter, que tiene unas 90 properties pero ninguna hace
referencia a posibles errores del SP (o eso creo)

¿Donde se queda este error? ¿Como detectarlo para habilitar su
correspondiente control?


Muchas gracias por todo, otra vez

Preguntas similare

Leer las respuestas

#16 jcac
12/02/2007 - 14:10 | Informe spam
Busca en los BOL - Libros en pantalla de SQL Server la creación de
procedimientos almacenados, te adjunto el link

http://www.microsoft.com/downloads/...p;FamilyID¦f79cb1-a420-445f-8a4b-bd77a7da194b

Saludos



"Juan Martínez" escribió en el
mensaje news:
Jolines... ya estoy algo cansado de esto. El código de debajo , te juro
que
no me devuelve error alguno... puedo acceder a alguna página donde
expliquen
BIEN los procedimientos almacenados?

Muchas gracias por tu ayuda, jcac.

"jcac" wrote:

Vamos asi es tu sp????

create procedure sp
as
declare @sql varchar(10)
set @sql = 'kk'
exec sp_executesql @sql

si lo ejecuto dentro de pequeño programita que te pase me da este error:

Error número: -2147217900
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Microsoft OLE DB Provider for SQL Server

Ahora la funcion sp_executesql te pide parametros y valores para los
parametros.

espero estarte ayudando

"Juan Martínez" escribió en el
mensaje news:
> Hola: No debo explicarme bien. La invocación al SP es correcta y el
> texto:
>
> set @sql='kk'
> EXEC sp_executesql @sql
>
> está DENTRO del propio SP. Al invocarlo desde VB no me devuelve error,
> aunque en ejecución dentro del propio SP se genere, puesto que kk no es
> una
> sentencia sql válida, ni nombre de función, ni nada
>
> Espero haberme explicado mejor. Un saludo y disculpas por la pesadez.
>
> "jcac" wrote:
>
>> y que te devuelve el objeto err???
>>
>> mira te paso un pequeño ejemplo donde no paso parametros ni nada, le
>> puse
>> por ejemplo text1 y eso lo va a tratar de ejecutar como un sp y lo
>> trata
>> pero me devuelve el error que no existe, en cambio le pongo sp_who2
>> que
>> si
>> existe y no me da error.
>>
>> Espero que esto te ayude.
>>
>> Saludos
>>
>> "Juan Martínez" escribió en el
>> mensaje news:
>> > Yap jac, pero la colección errors pertenece al objeto connection, y
>> > a
>> > mi
>> > me
>> > vuelve vacío. mconn.errors.count=0 y le he cascado a pelo en el
>> > procedure:
>> >
>> > set @sql='kk'
>> > EXEC sp_executesql @sql
>> >
>> > ¿?
>> >
>> > "jcac" wrote:
>> >
>> >> Hola Juan,
>> >>
>> >> Si la ejecución de tu código es que creas la coneccion cada ves que
>> >> ejecutas
>> >> algo, entonces no deberias de tener algun problema y me refiero que
>> >> si
>> >> lo
>> >> haces asi mas o menos:
>> >>
>> >> Private Sub Grabar()
>> >> On error goto error_grabar
>> >> 'codigo de coneccion
>> >> mConn.BeginTrans
>> >> bTransaccion = true
>> >> 'codigo de tu procedimiento osea ejecucion de command
>> >> m.Conn.CommitTrans
>> >> bTransaccion = false
>> >> exit sub
>> >> Error_grabar:
>> >> if bTransaccion = true then
>> >> mConn.RollbackTrans
>> >> for each xxx in mConn.Errors
>> >> Errores = Errores & "Error número: " & xxx.Number &
>> >> vbCrLf
>> >> &
>> >> xxx.Description & vbCrLf & xxx.Source & vbCrLf & vbCrLf
>> >> next
>> >> mConn.Errors.Clear
>> >> err.Clear
>> >> else
>> >> Errores = err.description
>> >> err.Clear
>> >> endif
>> >> msgbox Errores
>> >> End Sub
>> >>
>> >> Espero que esto te ayude, mas o menos es la forma en que lo manejo
>> >> los
>> >> errores.
>> >>
>> >> Nota que en la coleccion Errors es donde esta toda la informacion
>> >> devuelta
>> >> por SQL Server.
>> >>
>> >> Saludos
>> >>
>> >>
>> >> "Juan Martínez" escribió en
>> >> el
>> >> mensaje news:
>> >> > Ahhhh. Perdón, no te entendí. te adjunto el código. Gracias
>> >> > Set mConn = CreateObject("ADODB.Connection")
>> >> >
>> >> > GsConnchain = "Provider=SQLOLEDB.1;" & _
>> >> > "Persist Security Info=False;" & _
>> >> > "User Id=" & saUSR & ";" & _
>> >> > "Pwd=" & GsPwd & ";" & _
>> >> > "Initial Catalog=" & GsDatabase & ";" & _
>> >> > "Data Source=" & GsSQLServer
>> >> >
>> >> > mConn.Open GsConnchain
>> >> > mConn.CommandTimeout = 0
>> >> >
>> >> > Set oCommand = CreateObject("ADODB.Command")
>> >> >
>> >> > With oCommand
>> >> > .CommandTimeout = 0
>> >> > .ActiveConnection = mConn
>> >> > .CommandType = adCmdStoredProc
>> >> > .CommandText = "facturacion" 'Nombre del procedure en
>> >> > base
>> >> > de
>> >> > datos
>> >> > .Parameters.Append .CreateParameter("@RETURN_VALUE",
>> >> > adInteger,
>> >> > adParamReturnValue, 0)
>> >> > .Parameters.Append .CreateParameter("@sPeriodo",
>> >> > adVarChar,
>> >> > adParamInput, 5, sPeriodo)
>> >> > .Parameters(1).Value = sPeriodo
>> >> > .
>> >> > .
>> >> > .
>> >> > .
>> >> > oCommand.Execute
>> >> > Set oCommand = Nothing
>> >> >
>> >> > Un saludo
>> >> > Juan
>> >> >
>> >> >
>> >> > "jcac" wrote:
>> >> >
>> >> >> A lo que me referia era a tu codigo en vb para ver como lo
>> >> >> llamas
>> >> >> al
>> >> >> objeto
>> >> >> command asi como el connection.
>> >> >>
>> >> >> por eso te pedida tu forma de conecccion si es con ODBC o
>> >> >> OLEDB??
>> >> >>
>> >> >> "Juan Martínez" escribió
>> >> >> en
>> >> >> el
>> >> >> mensaje
>> >> >> news:
>> >> >> > Hola de nuevo, jcac. Creo que el código lo puse en la primera
>> >> >> > cuestión:
>> >> >> >
>> >> >> > 1.- Caso correcto
>> >> >> > DECLARE @sql nvarchar(4000)
>> >> >> > set @sql='UPDATE tabla SET campo1='ww''
>> >> >> > EXEC sp_executesql @sql
>> >> >> >
>> >> >> > 2.- Caso con error en la sintaxis SQL
>> >> >> > set @sql='UPDATE error en la sintaxis de la sentencia SQL'
>> >> >> > EXEC sp_executesql @sql
>> >> >> >
>> >> >> > Este procedure es invocado desde VB6 con un objeto command de
>> >> >> > ADO
>> >> >> > mediante
>> >> >> > el método 'objComm.execute'. El proc. fallará en el segundo
>> >> >> > caso,
>> >> >> > pero
>> >> >> > no
>> >> >> > se
>> >> >> > como obtener el texto del error desde vb6 para informar al
>> >> >> > usuario
>> >> >> > de
>> >> >> > la
>> >> >> > causa.
>> >> >> >
>> >> >> > Gracias otra vez. salu2
>> >> >> >
>> >> >> > "jcac" wrote:
>> >> >> >
>> >> >> >> Podrias postear por ejemplo parte de tu codigo donde te esta
>> >> >> >> generando
>> >> >> >> el
>> >> >> >> error, asi como la forma de conectarte que tienes. para poder
>> >> >> >> hacer
>> >> >> >> aqui
>> >> >> >> un
>> >> >> >> pequeño ejemplo
>> >> >> >>
>> >> >> >> Saludos
>> >> >> >>
>> >> >> >> "Juan Martínez"
>> >> >> >> escribió
>> >> >> >> en
>> >> >> >> el
>> >> >> >> mensaje
>> >> >> >> news:
>> >> >> >> > Hola jcac. Tengo una colección errors que está dentro del
>> >> >> >> > objeto
>> >> >> >> > connection
>> >> >> >> > de ADO, pero no me devuielve errores. erros.count=0
>> >> >> >> >
>> >> >> >> > hay algún otro objeto error dentro de ADO. donde esta?
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > Mil gracias
>> >> >> >> >
>> >> >> >> > "jcac" wrote:
>> >> >> >> >
>> >> >> >> >> Hola Juan
>> >> >> >> >>
>> >> >> >> >> Tienes el dentro del objeto ADO una coleccion que se llama
>> >> >> >> >> Errors,
>> >> >> >> >> alli
>> >> >> >> >> te
>> >> >> >> >> pasara todos los errores que encuntre al ejecutar una
>> >> >> >> >> sentencia
>> >> >> >> >> SQL
>> >> >> >> >> a
>> >> >> >> >> traves
>> >> >> >> >> de dicha coneccion. espero te sirva.
>> >> >> >> >>
>> >> >> >> >> Saludos
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> "Juan Martínez"
>> >> >> >> >> escribió
>> >> >> >> >> en
>> >> >> >> >> el
>> >> >> >> >> mensaje
>> >> >> >> >> news:
>> >> >> >> >> > Hola: Estoy atacando un SP de SQL Server 2000 desde una
>> >> >> >> >> > aplicación
>> >> >> >> >> > VB6
>> >> >> >> >> > en
>> >> >> >> >> > el
>> >> >> >> >> > que ejecuto sentencias como:
>> >> >> >> >> > DECLARE @sql nvarchar(4000)
>> >> >> >> >> > set @sql='UPDATE tabla SET campo1='ww''
>> >> >> >> >> > EXEC sp_executesql @sql
>> >> >> >> >> >
>> >> >> >> >> > Es algo más complicado, con parámetros de entrada que
>> >> >> >> >> > componen
>> >> >> >> >> > @sql
>> >> >> >> >> > para
>> >> >> >> >> > los
>> >> >> >> >> > nombres de las tablas a actualizar, etc. La cuestión es
>> >> >> >> >> > que
>> >> >> >> >> > si
>> >> >> >> >> > yo
>> >> >> >> >> > hago
>> >> >> >> >> > por
>> >> >> >> >> > ejemplo:
>> >> >> >> >> >
>> >> >> >> >> > set @sql='UPDATE error en la sintaxis de la sentencia
>> >> >> >> >> > SQL'
>> >> >> >> >> > EXEC sp_executesql @sql
>> >> >> >> >> >
>> >> >> >> >> > No se como detectar el error bien desde el objecto
>> >> >> >> >> > connection
>> >> >> >> >> > de
>> >> >> >> >> > ADO
>> >> >> >> >> > o
>> >> >> >> >> > bien
>> >> >> >> >> > desde el objeto parameter, que tiene unas 90 properties
>> >> >> >> >> > pero
>> >> >> >> >> > ninguna
>> >> >> >> >> > hace
>> >> >> >> >> > referencia a posibles errores del SP (o eso creo)
>> >> >> >> >> >
>> >> >> >> >> > ¿Donde se queda este error? ¿Como detectarlo para
>> >> >> >> >> > habilitar
>> >> >> >> >> > su
>> >> >> >> >> > correspondiente control?
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> > Muchas gracias por todo, otra vez
>> >> >> >> >> >
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>
>>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida