Necesito ayuda con una base de datos de precio de casas y su tamaño en hectáreas

En una base de datos hay 2 tablas A y B - La tabla A tiene dos campos, y dos registros: Concepto(casa, hectárea) y Precio(48, 60) Las palabras Casa y Hectárea son fijas, pero el precio es variable. La tabla B tiene muchos campos, pero entre ellos 3: ¿Casa?(Si, no), Hectáreas(20,25) y Precio. La duda es la siguiente: En el campo precio, si el campo casa (lógico) es que SI, ¿queremos qué aparezca en precio la cantidad de 48?, independientemente del numero de hectáreas que tenga. Si el campo casa es NO, ¿en el precio tiene que aparecer la multiplicación del precio de hectárea (60?) Por el numero de hectáreas. Por tanto necesito la fórmula del campo precio para que haga lo que explicado antes. GRACIAS!

2 Respuestas

Respuesta
1
Respecto a lo que preguntas he estado dándole vueltas y lo menos complicado es utilizar un procedimiento para hacer lo que quieres, te lo pongo en Oracle PL/SQL para que lo puedas portar al SGBD que estas utilizando.
tab_A
------
Concepto ---> valores ('casa', 'hectarea')
Precio
tab_B
------
Es_casa ---> valores ('s', 'n')
Hectáreas
Precio
Aquí empieza el procedimiento:
Declare
cursor cr is select es_casa, hectareas from tab_B for update of precio;
xprecio number;
begin
for reg in cr loop
if reg.es_casa = 's' then
select precio into xprecio from tab_a where concepto='casa';
update tab_B set precio = xprecio where current of cr;
else
select precio into xprecio from tab_a where concepto='hectarea';
update tab_B set precio = (reg.hectareas * xprecio) where current of cr;
end if;
end loop;
commit;
end;
/
Como ves tenemos que comparar valores fijos ('casa', 'hectarea', etc.) dentro del código de procedimiento, a mi personalmente no me gusta ya que si metes otro concepto en tab_A te toca modificar el código.
No se si el modelo de datos te viene impuesto, pero si lo puedes retocar te aconsejaría estas pequeñas modificaciones:
tab_A
------
Concepto ---> clave primaria valores ('casa', 'hectarea')
Precio
tab_B
------
Concepto ---> clave foránea a tabla_a con valores ('casa', 'hectarea')
Es_casa ---> valores ('s', 'n')
Hectáreas
Precio
De esta manera en tab_b también identificas si es una casa por el concepto, pudiendo eliminar el campo es_casa, además de poder enlazar directamente con el precio. Se puede simplificar el procedimiento de la siguiente manera:
Declare
cursor cr is select concepto, hectareas from tab_B for update of precio;
xprecio number;
begin
for reg in cr loop
select precio into xprecio from tab_a where concepto=reg.concepto;
if reg.es_casa = 's' then
update tab_B set precio = xprecio where current of cr;
else
update tab_B set precio = (reg.hectareas * xprecio) where current of cr;
end if;
end loop;
commit;
end;
/
Incluso puedes realizar todo en una misma sentencia UPDATE de SQL añadiendo funciones (DECODE, CASE, IIF...) según el gestor de base de datos que estés utilizando (esto hay que probarlo específicamente).
Respuesta
1
Supongo que en algún formulario,, hay un campo casa .. entonces si ese campo es verdadero poner 48 si no poner 60*hectáreas
Asociale código al evento
casa_afterUpdate
IF casa THEN
precio=48
ELSE
precio=60*Hectarea
ENDIF
END SUB
Regístrate en mi página y podrás bajar ejemplos de access con visual basic... para que puedas ver como se hace...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas