Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 29-05-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 22
RolphyReyes Va por buen camino
Lightbulb Solución del problema

Saludos.

Gracias maeyanes pero eso funcionaria sí y solo sí no tendrías referencias para el campo, pero en mi caso tengo unas quince (15) al mismo y esta en producción ya sabes el trabajo que eso implica.

No obstante, para tratar de subsanar el fallido intento del ALTER TABLE al campo calculado decidí revisar la tabla RDB$FIELDS y en la misma encontré el campo RDB$COMPUTED_SOURCE, pensé aquí está mi salvación .

Al cambiar el valor del campo y realizar un SELECT a la tabla veo que el valor continua igual, ahí mismo dije ya me j.....

Vi un campo al lado llamado RDB$COMPUTED_BLR del siguiente tipo BLOB SUB_TYPE 2 SEGMENT SIZE 80 este me llamo la atención por la forma en que IBExpert lo visualiza (obviamente es un Blob) de diferentes maneras (Text, Hex, Picture, RTF, Web Page, BLR y Unicode Text) al ver su contenido me di cuenta de que este es el usado por Firebird para realizar la operación del COMPUTED BY (claro que al inicio pensé que era RDB$COMPUTED_SOURCE, pero al fallar el cambio).

Contenido de un campo calculado visualizándolo como BLR:
Cita:
blr_version4,
blr_multiply,
blr_field, 0, 8, 'C','A','N','T','I','D','A','D',
blr_field, 0, 6, 'P','R','E','C','I','O',
blr_eoc
Me di cuenta de que no podía cambiar el valor del campo directamente así que no me quedo más remedio que hacer lo siguiente para poder realizar la operación:

Primero creo un campo temporal con el calculo que deseo
Código SQL [-]
alter table TABLA add TMP computed by ((CAMPO1 - CAMPO2) * CAMPO3);

Segundo realizar el update del campo RDB$COMPUTED_BLR
Código SQL [-]
UPDATE RDB$FIELDS F 
SET F.RDB$COMPUTED_SOURCE = '((CAMPO1 - CAMPO2) * CAMPO3)'
,F.RDB$COMPUTED_BLR=(select F.RDB$COMPUTED_BLR
from RDB$RELATION_FIELDS FR
JOIN RDB$FIELDS F ON F.RDB$FIELD_NAME=FR.RDB$FIELD_SOURCE
where FR.rdb$relation_name='TABLA'
AND FR.RDB$FIELD_NAME='TMP')
WHERE F.RDB$FIELD_NAME=(
select FR.RDB$FIELD_SOURCE
from RDB$RELATION_FIELDS FR
where FR.rdb$relation_name='TABLA'
AND FR.RDB$FIELD_NAME='CAMPO_REAL_CALCULADO');

Sí se fijan actualice el campo RDB$COMPUTED_SOURCE solo para mantener la referencia de que estoy calculando.

Y por último
Código SQL [-]
alter table TABLA DROP tmp;

Espero que les pueda servir en algún momento.

Hasta luego.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Campo Calculado!!! Ledian_Fdez OOP 1 03-10-2007 22:10:01
Pasar un campo calculado a un campo del mismo DbGrid maravert Conexión con bases de datos 3 12-05-2006 00:31:30
Campo calculado sercornejov MySQL 3 09-08-2005 02:54:35
Campo de bd calculado davidgaldo MS SQL Server 3 20-05-2005 15:50:22


La franja horaria es GMT +2. Ahora son las 07:32: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
Copyright 1996-2007 Club Delphi