Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/07/2009, 12:53
matiasdagatti
 
Fecha de Ingreso: noviembre-2007
Mensajes: 133
Antigüedad: 16 años, 6 meses
Puntos: 0
Busqueda overflow con vb6 + mysql

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