Como puedo generar un error en MySQL?

272 views
Skip to first unread message

ZeRoberto

unread,
Aug 16, 2014, 11:31:52 PM8/16/14
to publicesvfoxpro
Tengo un procedimiento almacenado en MySQL cuya función es sumar el stock cada vez que se pasa una etiqueta por el lector, pero a veces el lector se loquea y bota un código no valido o incompleto, entonces hace el UPDATE pero como no encuentra el código no hay problema, el problema es que el que opera cree que ya se registro y pasa el producto.

Lo que necesitaría es generar un error en MySQL para luego en mi programa interpretarlo y mandar el mensaje correspondiente.

--
btnMyVideo.Click()

J. Enrique Ramos Menchaca

unread,
Aug 16, 2014, 11:54:07 PM8/16/14
to publice...@googlegroups.com
Creo que mas que buscar un error deseas usar mysql_affected_rows() o ROW_COUNT() que te devuelve el número de registros modificados, si es 0 entonces no actualizó nada, y puedes informarle al usuario. Te dejo la siguiente referencia, para que puedas profundizar al respecto.

http://dev.mysql.com/doc/refman/5.0/en/mysql-affected-rows.html

ZeRoberto

unread,
Aug 17, 2014, 1:33:06 AM8/17/14
to publicesvfoxpro
Gracias Enrique solo me funciono el ROW_COUNT() pero quisiera saber si esta funcion devuelve las filas afectadas solo por ese cliente o es global.

Tambien te cuento que lo combine con esto para generar el error
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No se encuentrar el registro', MYSQL_ERRNO = 3002;


Saludos

francisco prieto

unread,
Aug 17, 2014, 8:25:20 AM8/17/14
to publice...@googlegroups.com
ZeRoberto...

Si el update afecta a mucho registros quizas te convendría atar algun campo a algun trigger, de esta forma sabrias fehacientemente cuales son los registros afectados por la modificacion y lo mas importante cuales no.

Saludos,

Pancho
Córdoba
Argentina

ZeRoberto

unread,
Aug 17, 2014, 10:09:20 AM8/17/14
to publicesvfoxpro
Hola Francisco, el update solo afecta 1 registro por vez, por el momento el ROW_COUNT() va bien.

Saludos

mapner

unread,
Aug 17, 2014, 10:48:30 AM8/17/14
to publice...@googlegroups.com
Tengo un caso similar a lo que comentas pero en Firebird, un procedimiento almacenado donde deben ingresar ciertos parámetros para actualizar unas tablas. En el SP debo validar que los parámetros son correctos y si no es asi lanzo una excepción al usuario que es como forzar un error.
No conozco a fondo como hacerlo en MySql pero googleando encuentro esto que seguramente te puede servir.

http://dev.mysql.com/doc/connector-python/en/connector-python-api-errors-error.html

Saludos

ZeRoberto

unread,
Aug 17, 2014, 10:55:14 AM8/17/14
to publicesvfoxpro
Hola Mapner con esto genero un error en el SP
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No se encuentrar el registro', MYSQL_ERRNO = 3002

Y en clase lo recibo asi
If loCursor.SQLCode < 0
   If loCursor.eCode = 3002
     MessageBox("No se encontro el registro!")
   EndIf
EndIf

Saludos
Message has been deleted
Message has been deleted

mapner

unread,
Aug 17, 2014, 11:01:56 AM8/17/14
to publice...@googlegroups.com
Acá veo un tutorial más explícito sobre como generar excepciones desde SP en MySql.

http://www.mysqltutorial.org/mysql-error-handling-in-stored-procedures/

Saludos

J. Enrique Ramos Menchaca

unread,
Aug 17, 2014, 1:28:15 PM8/17/14
to publice...@googlegroups.com
Ze Roberto, te devuelve respecto al último commando realizado en tu caso update, ponlo dentro de un Store Procedure tal y como te comenta mapner y así estarás seguro que la información que te devuelva es del update inmediato anterior que realizaste.

Arnaldo Toledano

unread,
Aug 18, 2014, 9:52:24 AM8/18/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Yo utilizo esta alternativa
SHOW WARNINGS
If Sqlexec(conexion,"SHOW WARNINGS","CURSOR")

EN cursor, pones analizar el error.


Arnaldo Toledano
--
Arnaldo Toledano Tesys Informática Córdoba Argentina
Reply all
Reply to author
Forward
0 new messages