Hola como estan?
Bueno queria preguntarles por un problema que tengo. Estoy programando con vb6 + mysql y el problema que tengo es que al ejecutar un procedimiento almacenado que a la vez tiene un trigger asociado me tira un error "error 6" que es el de desbordamiento pero ayer no me daba este error, se ejecutaba todo menos la linea del trigger siguiente teniendo en cuenta que la variable new.movimiento = 'A'
Código:
update cuentahistoria set estado = 'BAJA' where monto = new.monto and codcuenta = old.codcuenta and fecha = new.fechaentregaanulada and movimiento = 'E';
tanto el trigger como el procedimiento estan bien porque los pude crear sin problemas y al ejecutar cada una de las consultas tanto del trigger como del procedimiento en forma manual (osea en la consola de mysql) no tengo problemas y hace todo como quiero. Incluso si actualizo la cuenta en forma manual el trigger se ejecuta sin problemas.
Aca les paso el procedimiento
Código:
// ESTOS SON LOS PARAMETROS
code int, codigoe int, montoe decimal(15,2), fechae datetime, sucursal varchar(1), movimiento varchar(1), tipoe varchar(1), fechaene datetime
begin
delete from mov_cuenta
where mov_cuenta.codcuenta = code and mov_cuenta.entrega = montoe and
mov_cuenta.fecha = fechaene;
update cuenta set debe = debe - montoe, monto = montoe, fecha = fechae, tipo = tipoe, movimiento =
movimientoe, sucursal = sucursale, fechaentregaanulada = fechaene where codcliente = codigoe;
end
este procedimiento borra un registro en la tabla mov_cuenta (borra una entrega) y actualiza la cuenta restandole esa entrega
antes de hacer un update en la tabla cuenta se ejectua este trigger
Código:
begin
if new.movimiento = 'A' then
update cuentahistoria set estado = 'BAJA' where monto = new.monto and codcuenta = old.codcuenta and fecha = new.fechaentregaanulada and movimiento = 'E';
insert into cuentahistoria(codcuenta, fecha, usuario, debeant, debepost, tipo, monto, pto_venta, numfactura, movimiento, debeantant, debeantpost, sucursal, fechaentregaanulada) values(old.codcuenta, new.fecha, '', old.debe, new.debe, new.tipo, new.monto, new.pto_venta, new.numfactura, new.movimiento, old.deudaant, new.deudaant, new.sucursal, new.fechaentregaanulada);
else
insert into cuentahistoria(codcuenta, fecha, usuario, debeant, debepost, tipo, monto, pto_venta, numfactura, movimiento, debeantant, debeantpost, sucursal) values(old.codcuenta, new.fecha, '', old.debe, new.debe, new.tipo, new.monto, new.pto_venta, new.numfactura, new.movimiento, old.deudaant, new.deudaant, new.sucursal);
end if;
end
el trigger lo que hace es que si hice una entrega o una venta en cuenta corriente registra los valores antes y despues de debe y cosas como si fue una resta en la cuenta o una suma, la fecha, si fue entrega o venta etc etc etc
como decia antes todas estas consultas en forma manual funcionan bien pero cuando lo hago llamandolas con este codigo de vb6 me da ese error de desbordamiento
Código:
db.BeginTrans
dbestado = True
Set cmd = New ADODB.Command
cmd.ActiveConnection = db
cmd.CommandText = "call anularentrega (" & Val(Text1) & ", " & Val(Text8) & ", " & MONTO & ", '" & Format(Date, "yyyymmdd") & "', '" & sucu & "', 'A', 'R', '" & Format(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 4), "yyyymmdd") & "')"
MsgBox (cmd.CommandText)
cmd.Execute
db.CommitTrans
un ejemplo de cmd.commandtext es este
call anular entrega (3, 3, 150.66, '20090716', 'A', 'A', 'R', '20090716')
son los parametros del procedimiento
donde le paso lo siguiente codcuenta, codcliente, monto( a descontar), fecha(hoy), movimiento(si es venta, entrega o anulacion de entrega), sucursal, fechaentregaanulada (fecha de la entrega que voy a anular)
bueno espero haber dado todos los detalles
les recuerdo que si hago todo eso manualmente funciona bien y que el error que me da es overflow y cuando no me da overflow ejecuta todo menos la linea del trigger
Código:
update cuentahistoria set estado = 'BAJA' where monto = new.monto and codcuenta = old.codcuenta and fecha = new.fechaentregaanulada and movimiento = 'E';
Muchas gracias