Usar un solo procedimiento almacendado para restar o sumar valores a un mismo registro
Muy a menudo hacemos aplicaciones (desktop o que soporte multiusuarios) que tengan que actualizar una columna de saldo en una tabla de proveedores o clientes. También puede ser el caso de actualizar la existencia de un producto en el inventario.
Por ejemplo hay transacciones (Compra al crédito) que puede aumentar el saldo del proveedor o puede haber una transacción (un pago al proveedor) que disminuya el saldo del proveedor.
La mejor manera de hacer esto es por medio de procedimientos almacenados.
Yo en lo personal hacia un procedimiento que actualizara el saldo. Pero antes tenia saber como quedaría el saldo después de la transacción. Ya sea que aumentara o disminuyera dependiendo de la transacción.
Así que tenia que hacer un procedimiento en delphi, que decidiera dependiendo de la transacción, si debía aumentar o disminuir el saldo. Por fuerza tiene que haber una condición if para lograr esto. Pero con este truco ya no es necesario una sentencia if. Basta con solo enviar el monto de la transacción en forma negativa o positiva. Aprovechando la ley de los signos en aritmética.
Por ejemplo tenemos una columna Saldo de la tabla proveedores y vamos aplicarle un abono al saldo del proveedor. Al final de la transacción el saldo será menos. Con la siguiente sentencia logro esto. La sentencia tiene dos parámetros, uno es el monto que se aumentara o disminuirá el saldo y el otro el numero del proveedor para localizarlo.
UPDATE proveedores SET proveedores.Saldo = proveedores.saldo+[Monto]
WHERE (((proveedores.registro)=[xRegistro]));
El truco esta en mandar el parámetro del monto como negativo si queremos disminuir y como positivo si queremos aumentarlo. Así nos ahorramos código y la aplicación es mucho mas rápida.
|