Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Parametro en un cálculo. Se puede? (https://www.clubdelphi.com/foros/showthread.php?t=42342)

Carmelo Cash 11-04-2007 22:44:40

Parametro en un cálculo. Se puede?
 
Hola amigos del foro. Estoy con un problema y tal vez me pueden ayudar. Estoy utilizando InterBase y Delphi 7. Resulta que escribí una consulta que es una belleza. Muestra el total de ventas y la comision del vendedor.

Es algo así (no coloco la verdadera porque es muy larga).

select Vendedor, sum (importe) as Importe
from ventas
where vendedor =:P_Vendedor
group by Vendedor

union

select 'comision', sum(importe) * 5/100
where vendedor =:P_Vendedor


esto arroja el siguiente resultado.
----------------
Venedor importe
-----------------
Gonzales 1000
Comision 50

Hasta acá todo bien, cambiando el parámetro P_Vendedor está resuelto.
Pero resulta que distintos vendedores tienen distintas comisiones entonces debo reemplazar el 5 por un parámetro. La union debería ser algo así:

select 'comision', sum(importe) * :P_Comision /100
where vendedor =:P_Vendedor

El problema es que esto parece que está mal porque me da un error. Está bien que esté mal?

El Error que aparece es:

"Invalid modify request. Array/Blob/Date data types not allowed in arithmetic":confused:

Bueno espero que alguien pueda darme una mano.
Desde ya muchas gracias.:cool:

roman 11-04-2007 23:00:37

No sé especificamente en Interbase, pero normalmente los parámetros son sólo para valores de campos, como el caso de :p_vendedor.

Se me ocurre que podrías tener una tabla comisiones donde almacenes la comisión de cada vendedor, y enlaces esta tabla en la consulta. Algo como esto:

Código SQL [-]
select 'comision', sum(importe) * comisiones.comision /100
from ventas
left join comisiones on comisiones.vendedor = vendedor
where vendedor =:P_Vendedor

// Saludos

marcoszorrilla 11-04-2007 23:36:07

Estoy con lo que dice Román. De hecho yo tengo algunos programas que calculan comisiones y cada vendedor tiene 3 tipos de comisión dependiendo precios de venta... y los tipos de comisión se almacenan en la Tabla Vendedores.

La variante que tengo yo es que cada linea de venta contiene un número del 1..3 para mostrar el tipo de comisión que hay que calcular, claro está el tipo 1 no es igual para todos los vendedores, por eso hay que terminar realizando un encuentro con la tabla Vendederes del tipo que apunta Román.

Un Saludo.

Carmelo Cash 11-04-2007 23:43:08

Gracias funcinó
 
En realidad las comisiones ya las tenía en una tabla, entonces hice el Join y listo.
Roman: Si no fueras hombre me enamoraría de vos.......Igual cuidate!!!
Jejejee saludos:)

roman 11-04-2007 23:44:13

¡Claro! No sé porque pensé en una tabla extra siendo que lo lógico era empezar con un campo en la misma tabla de vendedores a menos que la situación se más compleja como la que describes Marcos.

¡Qué bueno que lo apuntaste!

// Saludos

basti 12-04-2007 11:55:59

hola, aunque el problema está resuelto, la consulta que daba error
Código SQL [-]
select 'comision', sum(importe) * :P_Comision /100
where vendedor =:P_Vendedor
es correcta, supongo por el error que te daba, que el problema está en que no le habías asignado el tipo de dato al parámetro:

Código Delphi [-]
  query.ParamByName('P_comision').DataType := ftFloat;
  query.ParamByName('P_comision').AsFloat := 5;
  query.Open;

Lepe 12-04-2007 16:11:27

Muy interesante tu apreciación basti.

Me lo apunto ;).

Saludos

roman 12-04-2007 18:40:32

Muy cierto, estaba yo en un error. Los parámetros sustituyen valores y eso incluye el que originalmente se pedía. Lo que no puede sistituirse son nombres de campos, nombres de tablas, etc.

Lamento la confusión y gracias basti por la aclaración.

// Saludos


La franja horaria es GMT +2. Ahora son las 17:54:38.

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