Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Crear tablas en IB 7, con condicción, para Cesar

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Crear tablas en IB 7, con condicción, para Cesar Responder citando

Código:

create table DetallesComanda
(
  Lugar                     varchar(7) not null,
  Numero                    numeric(3,0) not null,
  FamiliaArticulos          numeric(2,0) not null,
  CantArticulos             numeric(2,0)not null,
  CodArticulos                integer not null,
  DescripArticulos          varchar(30)not null,
  CodComentarios            integer,
  DescripComentarios        varchar(30),
  PrecioArticulos           numeric(9,2) not null,
  PrecioCosteArticulos      numeric(9,2) not null,
  PrecioComentarios         numeric(9,2),
  PrecioCosteComentarios    numeric(9,2),
  Orden                     numeric(4,0) not null,
  Descripcion_Completa      Computed by (DescripArticulos || ' ' || DescripComentarios),
  Precio_PVP                Computed by (PrecioArticulos + PrecioComentarios),
  Precio_Coste              Computed by (PrecioCosteArticulos + PrecioCosteComentarios),
  Total_PVP                 Computed by (CantArticulos * Precio_PVP),
  Total_Coste               Computed by (CantArticulos * Precio_Coste),
 
  primary key (Lugar, Numero, Orden)
);

Visto esta tabla, tengo el siguiente problema:
En los campos calculados con “Computed by”, tengo que controlar que si uno de sus campos es NULO que me ponga otro valor que yo quiera:

Ejemplo

Código:

if(DescripComentarios is null)
      Descripción_Completa = DescripArticulos;


if(PrecioComentarios is null)
      Precio_PVP =  PrecioArticulos;

if(PrecioCosteComentarios is null)
      Precio_Coste = PrecioCosteArticulos


¿Cómo implemento esto en la tabla?

Lo he intentado con una clausula “check”, pero no me aclaro, o no funciona.

Necesito vuestra ayuda. Gracias.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Me creo que no vas a poder hacerlo con un Check, es lo que se me ocurre a priori, lo que si te puedo decir es muy sencillo, implementate un trigger, que se dispare en las insercciones o modificaciones, y que precisamente lo que estas preguntando, compruebe si cierto campo es null y entonces le de el valor del otro campo...

Ejemplo:

Código:

SET TERM ^
CREATE TRIGGER Comprueba_Comentarios FOR DetallesComanda
ACTIVE AFTER INSERT
AS
BEGIN
  IF (OLD.DescripComentarios IS NULL) THEN
      NEW.Descripcion_Completa=OLD.DescripArticulos;
  IF (OLD.PrecioComentarios IS NULL) THEN
      NEW.Precio_PVP=OLD.PrecioArticulos;
  IF (OLD.PrecioCosteComentarios IS NULL) THEN
      NEW.Precio_Coste=OLDPrecioCosteArticulos;
END
^


El trigger del ejemplo se disparará justo despues de hacer cada inserción en la tabla DetallesComanda, y comprabará cada uno de los tres campos y actuará en consecuencia para cada uno de ellos...

Quizás deberías también hacerlo en las modificaciones...

Bueno espero que te sirva, cuidate! ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Correcto Responder citando

Gracias por tú respuesta. Es que no sabía como implementar la sentencia if en un Procedimiento o Trigger. Ahora ya lo tengo claro.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.