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

#6 jcac
01/02/2007 - 21:25 | Informe spam
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
>



Respuesta Responder a este mensaje
#7 Juan Martínez
02/02/2007 - 09:52 | Informe spam
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
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#8 jcac
02/02/2007 - 18:10 | Informe spam
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
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#9 Juan Martínez
04/02/2007 - 21:58 | Informe spam
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
>> >> >
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
#10 jcac
05/02/2007 - 21:02 | Informe spam
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
>> >> >
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida