Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ayuda con una suma en interbase (https://www.clubdelphi.com/foros/showthread.php?t=79538)

jordangel 14-07-2012 07:18:47

ayuda con una suma en interbase
 
buenas noches amigos les escribo para pedirles ayuda con un problemita en interbase

estoy intentado crear un store procedure de incluir, el programa lo corre pero al momento de realizar una prueba me muestra todo lo ke agrego pero no me calcula el total, me sale NULL, pero en lo demas si me agrega los valores.. porfa ayudenme en este codigo.

aqui el codigo
Código SQL [-]
set term!
create procedure incluvend (icivend varchar (15), iapenomb varchar (30), ifnac date, isbase float, ibsfact float, 
ibscobranza float, iporcomisvta float, iporcomiscob float)
as
  declare variable totaldev float;
  declare variable bscomisvta float;
  declare variable bscomiscob float;
  declare variable sbase float;
  declare variable bsfact float;
  declare variable bscobranza float;
  declare variable porcomisvta float;
  declare variable porcomiscob float;
begin
  bscomisvta= :bsfact*:porcomisvta/100;
  bscomiscob= :bscobranza*:porcomiscob/100;
  totaldev= :sbase+:bscomisvta+:bscomiscob;
  insert into vendedor values
  (:icivend,:iapenomb,:ifnac,:isbase,:ibsfact,:ibscobranza,:iporcomisvta,:iporcomiscob,:totaldev);
end

a cada campo de coloce una (i) antes del nombre como para identificar que son de incluir, execpto el total que no esta declarado arriba

ecfisa 14-07-2012 07:25:14

Hola jordangel.

Por favor cuando incluyas código en tus mensaje utiliza TAG's para darle más legibilidad. Te pongo una imágen que explica el uso:



Ya las agregué al codigo de tu mensaje.

Saludos y gracias por tu colaboración. :)

Casimiro Notevi 14-07-2012 09:26:27

No queda claro el problema :confused:

Gallosuarez 14-07-2012 16:09:34

Posible error ...
 
Jordangel:

De acuerdo a la documentación la sentencia insert es la siguiente:
Código SQL [-]
INSERT INTO tabal | vista (lista columnas) 
VALUES (lista de valores) 
[RETURNING  lista_columnas [INTO lista variables]]

En tu sentencia insert, veo la lista de valores a sustituir , pero ¿Donde está la lista de las columnas?
Ignoro si se pueda utilizar como tu la tienes, pero mi costumbre es siempre poner toda la lista de las columnas y despues poner toda la lista de valores, ¿me explico?

Saludos,
GST

birmain 14-07-2012 16:36:46

Suma nula
 
Cuando se opera con un valor null, el resultado de cualquier operación que se realice con el, también es null. Para evitar esto, antes de operar con ciertos valores, es conveniente hacer la siguiente comprobación:

Código SQL [-]
if (valor is nul) then valor =0

Casimiro Notevi 14-07-2012 16:54:37

Gallosuarez, sí que se puede omitir la lista de campos si se dan los valores de todos ellos.

Casimiro Notevi 14-07-2012 16:57:51

Cita:

Empezado por birmain (Mensaje 437439)
Cuando se opera con un valor null, el resultado de cualquier operación que se realice con el, también es null. Para evitar esto, antes de operar con ciertos valores, es conveniente hacer la siguiente comprobación:
Código SQL [-]if (valor is nul) then valor =0

Para esos casos es conveniente usar coalesce, que es una "abreviatura" :) del if .. then

Código SQL [-]
coalesce( : parametro, 0 )

Si el parámetro que se le pasa al campo es nulo entonces le da el valor cero.

Gallosuarez 15-07-2012 03:06:27

Creo haber hallado el problema ....
 
Jordangel:

Si afirmas que todos los demás valores no presentan ningún problema y la suma total contiene el valor nulo, entonces:
Código SQL [-]
  totaldev= :sbase+:bscomisvta+:bscomiscob;

la variable sbase debe de tener un valor nulo ... y efectivamente, nunca inicializas tal variable .... creo que mas bien debe de ir el parámetro isbase, ¿o no?

Saludos,
GST

Casimiro Notevi 15-07-2012 11:46:33

Claro, si el resultado es nulo es porque algún valor/parámetro es nulo.

gendelphi 18-07-2012 01:35:09

NULL en Firebird
 
Una buena guía para manejo de NULL en Firebird

Casimiro Notevi 18-07-2012 08:29:02

Aquí está traducida al español.


La franja horaria es GMT +2. Ahora son las 19:59:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi