PDA

Ver la Versión Completa : No Encuentro el Error del Trigger en FireBird 2.5


teletranx
30-01-2011, 00:21:55
Saludos a todos
Tengo el siguiente problema:
El trigger funcionaba bien en la versión 1.5.6 y 2.1.3 pero cuando estoy actualizando la base de datos a la versión 2.5 y compilo los trigger y varios salieron con errores, verificando no encontre nada.
El siguiente trigger es un ejemplo de ello

CREATE OR ALTER Trigger Rem_Maefin_Bd0 For Rem_Maefin
Active Before Delete Position 0
As
Declare Variable Ano Smallint;
Declare Variable Mes Smallint;
Declare Variable Fecini Date;
Declare Variable Fecter Date;
Declare Variable Fecha Date;
begin
If (Old.Mf_Estado = 'N') Then Exit;
Select Parrem.Pm_Anoliq, Parrem.Pm_Mesliq
From Parrem
Where Parrem.Ne = Old.Ne
Into :Ano, :Mes;
If (Old.Mf_Estado = 'F') Then
Begin
Fecha = Encodedate(1, :Mes, :Ano);
-- Exception E_Asignado Fecha;
-- Aislando el error
if (Old.Mf_Fecter < Fecha) then
exception e_asignado 'No puede Borrar Finiquito, es de otro Período';
--
FecIni = Encodedate(1, Mes, Ano);
FecTer = Lastdaymonth(FecIni);
Update Rem_Tabmov Set
Rem_Tabmov.Tm_Marca = 'S'
Where Rem_Tabmov.Ne = Old.Ne And
Rem_Tabmov.Tm_Numrut = Old.Mf_Rutfun And
Rem_Tabmov.Tm_Fecter >= :FecIni And
Rem_Tabmov.Tm_Fecter <= :FecTer;
End
end

Cuando compilo IbExpert versión 2011.01.11, sale lo siguiente

can't format message 13:393 -- message system code -4.
unsuccessful metadata update.
MODIFY TRIGGER failed.

Existen otros trigers que utilizo las funciones Encodedate y Lastdaymonth y no tengo problema.
Tambien he utilizado la último versión de Interbase&Firebird Development Studio y sale lo mismo
No encontrado nada de nada
He probado línea por línea el trigger cuando escribo las líneas
if (Old.Mf_Fecter < Fecha) then
exception e_asignado 'No puede Borrar Finiquito, es de otro Período';
Se produce el error, posteriormente comento las líneas y complilo continuo el error, llego a comentar todo lo que está entre el Begin y el End final y continua el error, no puedo compitar el trigger.
No se que estoy haciendo mal.
Saludos y esperando sus comentario y ayuda
Teletranx:confused:

Casimiro Notevi
30-01-2011, 02:02:30
¿No será una versión beta con algún extraño error?

teletranx
31-01-2011, 04:35:35
La verssión es Firebird-2.5.0.26074_1_Win32.exe, no es beta.
Está instalada como servicio y como aplicación.
En resumen en todas las modalidades y siempre me da el mismo error

Saludos :cool:

celades1
31-01-2011, 07:30:25
hola

Mi opinión es que tu BD no la has respaldado bien al pasarla a 2.5
Prueba de volverlo a hacer backup con 2.1 instalado
desinstalar, instalar y hacer restore con los gfix

ej


gbak -c -v -t -rep fitxer.fbk fitxer.ib -user SYSDBA -password masterkey
-FIX_FSS_D ISO8859_1 -FIX_FSS_M ISO8859_1


Igual no tengo razón pero yo tambien tuve problemas al pasar de 2.0 a 2.5
Yo creo que no te rompas la cabeza con el trigger, sino es la BD mal restaurada.

En fin es una sugerencia

Panta

teletranx
06-06-2011, 14:50:33
Gracias a todos
La repuesta es
gbak -c -v -t -rep fitxer.fbk fitxer.ib -user SYSDBA -password masterkey
-FIX_FSS_D ISO8859_1 -FIX_FSS_M ISO8859_1
para Firebird 2.5
Lo hice que quedo todo OK

JC;)
p.d. por mi trabajo no he podido responder antes.

Casimiro Notevi
06-06-2011, 15:50:23
Gracias a todos
La repuesta es
gbak -c -v -t -rep fitxer.fbk fitxer.ib -user SYSDBA -password masterkey
-FIX_FSS_D ISO8859_1 -FIX_FSS_M ISO8859_1
para Firebird 2.5
Lo hice que quedo todo OK

JC;)
p.d. por mi trabajo no he podido responder antes.

Bueno, aunque te sobra el -t porque eso es para hacer el backup 'transportable', no sirve para restaurar.

guillotmarc
06-06-2011, 20:54:53
Hola.

Echando un vistazo a tu código, veo que utilizas las funciones EncodeDate y LastDayMonth. Estas funciones no son internas de Firebird, sino que son funciones importadas de una UDF. Antes de utilizarlas debes declararlas, ¿ lo has hecho ?.

Asegúrate probando esta consulta : select EncodeDate(1,1,2000) from rdb$database

Tienes algo mal en la instalación del cliente de Firebird y por eso no es capaz de mostrarte los mensajes de error (parece que no encuentra el archivo con las descripciones de los errores, o bien encuentra el archivo de una versión anterior de Firebird). Prueba a volver a instalar el cliente de Firebird 2.5 en ese equipo, y entonces te devolverá un mensaje de error más descriptivo del problema, con lo que será mucho más fácil resolver el problema.

Saludos.

guillotmarc
06-06-2011, 22:03:25
Por cierto, para poder obtener un mensaje de error descriptivo, que nos indique cual es exactamente el problema para la compilación de ese código, además de necesitar tener correctamente instalado el cliente de Firebird 2.5, asegúrate también de que te estás conectando a través de la librería cliente fbclient.dll correspondiente a Firebird 2.5 (la ubicación de la librería cliente que utilizas, es uno de los parámetros de tu conexión a la base de datos).

NOTA: El cliente de Firebird se instala mediante el mismo instalador que el Servidor de Firebird, solo que durante la instalación tienes que seleccionar la opción correspondiente.

Saludos.