Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 19/05/2006
Al González's Avatar
[Al González] Al González is offline
In .pas since 1991
 
Join Date: May 2003
Posts: 5,610
Poder: 32
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.
Reply With Quote
  #2  
Old 19/05/2006
Al González's Avatar
[Al González] Al González is offline
In .pas since 1991
 
Join Date: May 2003
Posts: 5,610
Poder: 32
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.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
ERROR ORA-04082: referencias NEW u OLD no permitidas en disparadores a nivel de tabla Jose Manuel Oracle 4 27/08/2007 16:07
Un Desafio, a ver si pueden... pablo OOP 41 20/06/2005 18:12
triggers sobre vistas marti Firebird e Interbase 4 21/09/2004 16:41
Union en BDE eduarcol SQL 9 05/07/2004 18:49
Zeos y disparadores xerkan Firebird e Interbase 1 23/09/2003 10:49


All times are GMT +2. The time now is 00:09.


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