Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Formulas en registros de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=52773)

IVAND 30-01-2008 18:42:24

Formulas en registros de una tabla
 
Hola a todos

Tengo una pregunta espero me la puedan llegar a contestar

1.- Estoy elaborando un sistema de nomina-rol de pagos
2.- Base de datos firebird 1.5.4 y delphi 6

La idea de guardar la formula en un registro de la tabla X es porque hay veces las leyes cambian y es hai donde este concepto funciona a las mil maravillas Ejemplo

Campo : FORMULA
dato : T.VALOR*10/100

Entiendase por T.valor el alias de la tabla tal como lo escribiriamos en un select comun

Manana ese dato ya no sera t.valor si no t.valor2 ahi solamente yo cambiaria el dato en la tabla y no en mi aplicacion

Tabla 1
campo
key_u = Integer
Formula = Char(300)

Tabla 2
campo
key_u = integer
valor=numeric(15,2)
valor2=numeric(15,2)


Código SQL [-]
Select tabla1,t.formula,(:confused: como puedo mostrar el resultado de T.VALOR*10/100)

 from tabla1 ,tabla2 t
where tabla1.key_u=t.key_u

Espero me entiendan y de antemano gracias por su respuesta

Caral 30-01-2008 19:03:03

Hola
Algo asi:

Tabla 1
campo
key_u = Integer
Formula1 = numeric(2)
Formula2 = numeric(3)

Tabla 2
campo
key_u = integer
valor=numeric(15,2)
valor2=numeric(15,2)


Código SQL [-]
Select tabla2.Valor * tabla1.Formula1 / tabla1.Formula2
from tabla1 ,tabla2
where tabla1.key_u=t.key_u
Saludos

jachguate 30-01-2008 22:22:49

Si a lo que te referís es a la interpretación de la fórmula desde el propio select, me temo que no será posible de manera fácil.

Podrías hacer un UDF que reciba la fórmula, la interprete, se conecte de vuelta a la base de datos y obtenga los valores necesarios para evaluarla, pero lo veo complicado.

En cambio, si dejas esa intepretación a Delphi, podrías valerte de algún componente para evaluar expresiones, que hay variedad de estos. No se si en la sección de componentes del club, pero seguro en torry encontrás mas de uno.

Hasta luego.

;)

Lepe 31-01-2008 10:25:13

¿Procedimientos almacenados de ejecución?

Te verás limitado al PSql, pero quizás te sirva. Si necesitas funciones que no están soportadas, puedes apoyarte en las UDFs, rfunc es una biblioteca buena, pero no la única.

Código SQL [-]
Select a, b, Porcentaje(10, 100)
from tabla

Porcentaje(10,100) sería dicho procedimiento. De memoria con bastantes errores, para hacerte una idea.
Código SQL [-]
create procedure Porcentaje(
  porcent numeric(10,2),
  cantidad numeric(10,2)
) 
returning Valor numeric(10,2)
as
begin 
   Valor := cantidad * (porcent / 100)
end

En el caso que necesites algo muy especial, puedes hacer un procedimiento almacenado de selección.

Cuando cambien las leyes, entras a la base de datos y modificas el interior del procedimiento almacenado.

Saludos

jachguate 31-01-2008 10:41:38

Creo que hay confusión acá.

El asunto por el que IVAND pregunta no es si puede realizar ciertos cálculos. Es sobre si puede evaluar una fórmula almacenada como texto en un campo de la base de datos y devolver el resultado de dicha evaluación.

por ejemplo:

Código:

tabla
a        b        c        formula
========= ========= ========= ==============
1        2        3        'a+b+c'
2        4        6        'a*b-c'
3        6        9        'b/a+c'

Y haciendo un query tipo:

Código SQL [-]
select a, b, c, evaluar(formula), formula
  from tabla;

obtener un resultado como:

Código:

a        b        c        evaluar(formula) formula
========= ========= ========= ================ ============
1        2        3          6.0            'a+b+c'
2        4        6          2.0            'a*b-c'
3        6        9        11.0            'b/a+c'

Es lo que yo he entendido.

Delphius 31-01-2008 13:41:22

Cita:

Empezado por jachguate (Mensaje 262329)
Creo que hay confusión acá.

El asunto por el que IVAND pregunta no es si puede realizar ciertos cálculos. Es sobre si puede evaluar una fórmula almacenada como texto en un campo de la base de datos y devolver el resultado de dicha evaluación.

por ejemplo:

Código:

tabla
a        b        c        formula
========= ========= ========= ==============
1        2        3        'a+b+c'
2        4        6        'a*b-c'
3        6        9        'b/a+c'

Y haciendo un query tipo:

Código SQL [-]select a, b, c, evaluar(formula), formula
from tabla;


obtener un resultado como:

Código:

a        b        c        evaluar(formula) formula
========= ========= ========= ================ ============
1        2        3          6.0            'a+b+c'
2        4        6          2.0            'a*b-c'
3        6        9        11.0            'b/a+c'

Es lo que yo he entendido.

Yo también entiendo al tema como tu, Jach.
Lo ideal es como dices, que busque un componente de tercero que realize esta tarea (si es que existe) o sino deberá hacerlo.

Saludos,

IVAND 31-01-2008 15:32:48

Bueno que puedo decir , gracias a todos por su respuesta

La idea que tiene jachguate es justo la mia es evaluar una formula que esta en un campo texto , buscare en torry como un componente para evaluar formulas

Gracias nuevamente por su apoyo y si alguien ya lo ha echo me gustaria que compartiera su experiencia

Atentamente

Ivan Davila

Lepe 31-01-2008 16:16:46

Cita:

Empezado por jachguate (Mensaje 262329)
Es lo que yo he entendido.

Y yo también lo entendí así, pero no voy a repetir lo mismo que tú, por ello sugerí otra alternativa distinta; y sí, enfatizo distinta porque no quiere decir ni mejor ni peor.

Comenté las "rfunc" porque FB 1.5 carece de ciertas funciones integradas, y para realizar mi sugerencia, seguro necesitará de LPad, power, sqrt, etc.

Saludos


La franja horaria es GMT +2. Ahora son las 09:19:23.

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