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:
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.update cuentahistoria set estado = 'BAJA' where monto = new.monto and codcuenta = old.codcuenta and fecha = new.fechaentregaanulada and movimiento = 'E';
Aca les paso el procedimiento
Código:
este procedimiento borra un registro en la tabla mov_cuenta (borra una entrega) y actualiza la cuenta restandole esa entrega// 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
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:
un ejemplo de cmd.commandtext es estedb.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
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