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

#11 Juan Martínez
05/02/2007 - 21:26 | Informe spam
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
>> >> >> >
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>
>>



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









begin 666 Coleccion Errors ADO Connection.zip
M4$L#!!0````(`.R"139W(IO -0,``/8'```)````1F]R;3$N9G)M?55-3^,P
M$+TC\1^L'MA="54M4%90Y= VV=U(W:;;!#@BQYD6B\2N' ?"7]_3CIW/=H%*
M-.F\-S//XV=S[VU"/UB1R7 T.CV9PXX+<C\?_I J(^9K3$Y/""$+NM=<"M)\
M'/P;6'Q0X2D'H7\!WSWI!A^/+B<]< E;W25?CWI0)/>]NI=7_;0'GNBG+NWB
MJDI<<O&,:9Q]("AD-(5.SZ$@"W:%#RN'FBI]MU_+G-LE6TF$?'G@(I&O.7%A
M2XM46VX[KX7,,BJ2>:$UIM2_ZME]-+Z&-6A8/;DMZ^IZTL#=`'OPQ<VHP2,:
M^R*!LH^/6[ =<0<V*\9/;QA=[J3>"$\DAZN-H-1S61+S[!;YKOR;3^5/KCY5
M/_I4_?A3]9??+WOJ[==,:\%%,T!BZYD#\&<J8YH:2KBGS/!^T#2'
M(]9"`=4T3C_"UPH28"G%AY\@)U+%,<4K]S*'I"L05$;!>,H91Y>=GJP5?Z%(
M#XNX=Œ'@[V_/6;6:'+,\($F>5DY@:N\:(0P$R9%LV2/FQ+-%@<*2IRRIAI
MBZ2YE"E0<4[*LNR2/*6D.B?V`;F)A[@*L3-5`E'%R4\920+F]9'@C;Z
M'+*"UW<E/G#</2:JW>QA50NS26LE7W@"+(.EAQ7&TS7-\U>I$F<1K*+-
M+/16L^D:5,YSC2U9H;A^([[82L?,?*^Z]R%=[.-'TQ]@<>;
MSIEC!7<6!>'4Q0@)9:$8.*&WN??=8#/X3US$,Y"%1G6C!BM4+M52,EK?&S3!
MIM4M5E."/®HAWMJMOQ9,G1?-H]JN'A#+N^0-<?^=7(#%CSCS0Q,;1'UNZP
M"1SL=>/'PPIO>[#*%UD2:MSK!$?/CDEX[$VZ.?WV+FAPK\2Y:ZA[&S;7'S6O
M_8ZS*+DVWCX].;3.K0'][7NB2?0$M5VPST:F:4S9<]N)F/]<Q*/LR9K8%X9E
M+9HW-T9C9*=].R.#RL7B;P9*WI(!AC!]N"JR&*US1E[BA5INZZ@+.5.\.JQ'
M4&6=?=.54&,=#^]>D1'>OO-W\M"<_FVV^]\9Z[I.MG>
%02P,$% ````@`[8)%-AD,#;&)````P0````P```!-4U-#0U!22BY3
M0T-MCL$*PC 01.^!_L-^0<&[$:1W*>BM2(CIUK8TV;#9B/Z]K1%/PC #`_.8
M[MPTUTJMKB_CE&"5A429'8*C?K,@3 L,TX*5ZEJF&9WLZL<MEIWY5N9D/6K9
M(+$T&RR00 X]\C]HV1_ST[161KW_/0B /LH+DO 4[C (/B7G(L_U&I]#
MATJ]`5!+`P04````" #] ,"```X`P``# ```%!R;VIE8W0Q+G9B
M<%U238_:,!"](_$?++BTE8CR`<MRR"$DI$7B2PUE*S4].,D$O(WMR'98V*K_
MO79"676C:#3SQN,W\\;[:PW^X@+]WE<H00#+P?^4?OYMV[9KCSU[I)V;"?]Y
MW3=^^#-T+7MH#RTKO?]/RTVT?4I2>94*J.>F4A6\`M%3;<KA8H:!2G6!'.
MWE.ZP73BS!["431;S$=CQYV-YH^V-YIYCN=.XZD;34)#^?B.,A#YB9RY1 6@
M6O"CP!#0-Y:RC%!4^IU-:96$55#=<D%USR4J$@5^0,WU&$%4;;[!ER
M)9%F0RN2"2RN_5[,!?6-<:Q2T'XO45BHIO8'+3;H]T).*6:%Y_H#'6TP!7^P
M$]Q<9=)?H*I#SA1<U#+R!( .6^-G+@X@?$?[A'6^;=0Z$ZEU
MNX5&R"7+!5!@ZH8E(,:NN5 QJ4 :5"=-7<O%KEU;*UR3'"2Z(MT17+10
MB158MXY(U2YH;]Z&KM_6BE#R^A\6XS,7.\U,&JI'_*#H1P.'>HH#@9<(LN:X
M9"4WX(8'%<&2L*.)YKQAA0Q/D/]J+]<-EQ5_N0-QM>.$J;<X6A[NP3<F3#D4
M\:Z=:[-8:7 )#NU%":L\_<G`;C8@>C6:J UOFP:FFFH[++
M:"\).T9^=W/J]"I G<_(O4$L!`A8+% ````@`[()%-G<BF\ U`P``
M]@<```D``````````0`@`("!`````$9O<FTQ+F9R;5!+`0(6"Q0````(`.V"
M1389# VQB0```,$````,``````````$``0``@5P#``!-4U-#0U!22BY30T-0
M2P$"%@L4````" #] ,"```X`P``# `````````!`" `@($/! ``
B4')O:F5C=#$N=F)P4$L%!@`````#``,`JP```#P&````````
`
end
Respuesta Responder a este mensaje
#13 Juan Martínez
06/02/2007 - 16:50 | Informe spam
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
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
#14 jcac
06/02/2007 - 20:56 | Informe spam
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
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>>
>>
>>



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


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