Club Delphi  
    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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2006
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile ¿Pueden tener disparadores (triggers) las vistas “Union”?

¡Hola a todos!

Trabajo en el desarrollo de una aplicación Delphi 7 de 2.5 capas*. La base de datos es Firebird 1.5. Ayer aprendí que no sólo las tablas pueden tener disparadores, también las vistas. De hecho, para que una vista sea de lectura y escritura (y pueda ser utilizada como si fuera una tabla) es necesario que tenga disparadores Before que realicen la acción correspondiente a la inserción, modificación o eliminación de registros.

Bien, hoy, después de haber creado un disparador Before Insert para una de las vistas del proyecto, probé su funcionamiento agregando un registro a ésta (desde IBExpert). La operación falló, arrojando el siguiente mensaje de error compuesto:

The cursor identified in the update or delete statement is not positioned on a row.
no current record for fetch operation.
attempted update of read-only column.


Después de buscar soluciones a esto en la Red y hacer varias modificaciones a la vista y su disparador, descubrí que el error anterior ocurre, aparentemente, por tratarse de una vista que une dos tablas verticalmente (Select con Union). Cuando no utilizo Union, la operación se ejecuta sin problemas.

¿Será que no es posible emplear vistas Union para lectura y escritura en Firebird 1.5? Gracias por toda la ayuda que puedan proporcionarme. El código de la vista es el siguiente (aclarando que no fui yo el autor original):

Código SQL [-]
CREATE VIEW VWTARIFAS(
    ID,
    FIJA,
    IDTARIFASTIPOS,
    GRUPO,
    TIPO,
    FECHAINICIAL,
    FECHAFINAL,
    LIMITEINFERIOR,
    LIMITESUPERIOR,
    IMPORTE,
    IMPORTEEXCEDENTE)
AS
Select /*TF.ID*/Gen_id (GeneradorGeneral, 1),
    'Si', TF.IDTarifasTipos, TG.Nombre, TT.Nombre, TF.FechaInicial,
    TF.FechaFinal, CAST(NULL AS INTEGER), CAST(NULL AS INTEGER),
    TF.Importe, CAST(NULL AS NUMERIC (15, 4))
  From TarifasFijas TF, TarifasTipos TT, TarifasGrupos TG
  Where (TF.IdTarifasTipos = TT.ID) And (TT.IdTarifasGrupos = TG.Id)

 UNION

  Select /*TC.ID*/Gen_id (GeneradorGeneral, 1),
   'No', TC.IDTarifasTipos, TG.Nombre, TT.Nombre, TC.FechaInicial,
   TC.FechaFinal, TC.LimiteInferior, TC.LimiteSuperior,
   TC.Importe, TC.ImporteExcedente
  From TarifasConsumo TC, TarifasTipos TT, TarifasGrupos TG
  Where (TC.IdTarifasTipos = TT.ID) And (TT.IdTarifasGrupos = TG.Id)
;

Un abrazo unido.

Al González.

* Utilizo el término «2.5 capas» para referirme a una aplicación de dos capas (cliente-servidor) que ha sido estructurada de tal manera que facilitará la conversión a tres capas cuando surja esa necesidad. El código que deberá ir en el servidor de aplicaciones ya está aislado e identificado en su mayor parte.
Responder Con Cita
  #2  
Antiguo 19-05-2006
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Unhappy Aún sin solución

¡Hola a todos!

No he podido resolver este problema todavía. Intentaré creando una vista de la vista (por cierto, sin el Güindous Vista que yo también recomiendo no instalar sino hasta el 2008 ). Los mantendré informados y estaré muy atento a cualquier sugerencia.

Un abrazo disparado.

Al González.
Responder Con Cita
Respuesta



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
ERROR ORA-04082: referencias NEW u OLD no permitidas en disparadores a nivel de tabla Jose Manuel Oracle 4 27-08-2007 16:07:20
Un Desafio, a ver si pueden... pablo OOP 41 20-06-2005 18:12:21
triggers sobre vistas marti Firebird e Interbase 4 21-09-2004 16:41:17
Union en BDE eduarcol SQL 9 05-07-2004 18:49:10
Zeos y disparadores xerkan Firebird e Interbase 1 23-09-2003 10:49:54


La franja horaria es GMT +2. Ahora son las 10:29:36.


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
Copyright 1996-2007 Club Delphi