Foreros, pues despues de mucho buscar encontre lo que parece ser la solución al error que marcaba:
Código:
OUT or INOUT argument 8 for routine sglamesa.ProcInsCta is not a variable or NEW pseudo-variable in BEFORE trigger
No entindi porque devuelve ese error, pero esto fue lo que hice siguiendo un ejemplo que encontre en el foro oficial de mysql:
Agregue un nuevo SP, el cual seria llamado desde la aplicacion VB, este solamente recibiria los valores que serian evaluados y posteriormente grabados en la BD si todo salia bien. Este SP a su vez llamaba a otro SP al cual enviaba esos mismos parametros y ademas agregaba un parametro INOUT (la cual era la que marcaba error):
Código:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ProcGetMsg`(numcta char(9), nombcta varchar(90), tcuenta char(1), ctamayor int, fechacuenta char(10), clase char(1), subcta char(9))
BEGIN
DECLARE a INT DEFAULT 0;
CALL ProcInsCta(numcta, nombcta, tcuenta, ctamayor, fechacuenta, clase, subcta, a);
SELECT a;
END
Aca esta el otro SP que llama ProcGetMsg:
Código:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ProcInsCta`(numcta char(9), nombcta varchar(90), tcuenta char(1), ctamayor int, fechacuenta char(10), clase char(1), subcta char(9), INOUT mensaje int(1))
BEGIN
#declare mensaje int;
set @numerocta= NULL, @subctade= NULL, @cmayscta=NULL;
set autocommit=0;
start transaction WITH CONSISTENT SNAPSHOT;
select cuenta into @numerocta from `cont-cuenta` where `cuenta`=numcta;
if @numerocta = numcta then
#select 'La cuenta que intenta agregar ya existe';
set mensaje = 1;
else
insert into `cont-cuenta` (cuenta,nombre,tipo,mayor,fechalta,clase) values (numcta,nombcta,tcuenta,ctamayor,fechacuenta,clase);
show count(*) errors;
if @@error_count > 0 then
rollback;
set mensaje = 2;
else
if ctamayor<>1 then
select cuenta, mayor into @subctade, @cmayscta from `cont-cuenta` where `cuenta`=subcta;
if @subctade <> subcta then
rollback;
set mensaje = 3;
else
if @cmayscta <= ctamayor then
insert into `cont-ctasoc` (ctasup,subcta) values (subcta,numcta);
show count(*) errors;
if @@error_count > 0 then
rollback;
#select 'Error al insertar registro en cont-ctasoc. No se agrego el registro';
set mensaje = 4;
else
commit;
#select 'El registro se ha guardado con exito. cont-cuenta y cont-ctasoc';
set mensaje = 5;
end if;
else
rollback;
#select 'La cuenta superior no puede ser de menor rango que la cuenta que intenta agregar';
set mensaje = 6;
end if; ########
end if;
else
commit;
#select 'El registro se ha guardado con exito. cont-cuenta';
set mensaje = 7;
end if;
end if;
end if;
END
Sorpresivamente ya no me marca error, y obviamente ya graba en la BD si los valores son validos.
Ahora lo que si me gustaria saber, es como demonios rescato ese valor de "a" que esta en el SP ProcGetMsg y lo tome VB... alguien sabe?
Se supone que en consola, esta instruccion despliega en pantalla el valor de la variable "a":
Como rescato ese valor y vaya a VB????
Gracias