Pues lo mejor, creas un campo que se llame Direccion_Completa y que el usuario no lo pueda modificar.
En un Trigger before insert y before update, lo haces en manual:
Código SQL
[-]
create trigger for tabla1
before update before insert position 0
as
begin
if not isnull(new.calle) then
new.DireccionCompleta = 'Calle ' || new.calle;
if not isnull(new.numero) then
new.DireccionCompleta = new.DireccionCompleta || ' nº ' || new.numero;
if not isnull(new.Dpto) then
new.DireccionCompleta = new.DireccionCompleta || ' Dpto ' || new.Dpto;
end;
Que const que lo he escrito de memoria y para Firebird, no sé las peculiaridades que tiene Interbase, pero debe funcionar.
Al menos en firebird tienes una udf llamada CONCAT que permite sustituir al operador "||", la verdad, no sé si es estandar del SQL.
Un detalle importante: Yo pregunto si el campo es nulo, pero si has guardado dos guiones, deberás decir: if new.Dpto = "--" then
Cuando quieras la dirección por trozos, accedes a los campos calle, numero, Dpto. Cuando quieras la dirección completa, accedes a ese nuevo campo.
Es lo que se me ocurre de momento, si alguien tiene una idea mejor, bienvenida sea.
Saludos.