Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #7  
Antiguo 18-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.062
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues he estado probando y no me funciona, no sé si no vale para los triggers, aunque no da error ninguno, simplemente no se ejecuta.
He probado a guardar la sentencia creada en una tabla tbDebug y es correcta, así que no lo entiendo porque el código "normal" sí que funciona, lo he puesto al final, en comentario.
¿Podéis hacer una pruebecita con triggers en lugar de store procedure?
Estoy usando firebird 2.1

Código SQL [-]
CREATE OR ALTER trigger tbapuntes_ai0 for tbapuntes
active after insert position 0
AS
  declare variable iMes integer;
  declare variable cCampoDebe  varchar(8);
  declare variable cCampoHaber varchar(8);
  declare variable cSql        varchar(1024);
begin
  /* actualizar tbSaldosCuentas */
  if (new.codigoborrador>0) then  /* es borrador */
  begin
    update tbSaldosCuentas
    set debetotal=debetotal+new.debe,
        habertotal=habertotal+new.haber
    where codigoempresa=codigoempresa
    and ejercicio=ejercicio
    and codigocuenta=codigocuenta;
  end
  else /* no es borrador, es definitivo */
  begin
    iMes = extract(month from new.fechaasiento);
    cCampoDebe  = 'debe'  || cast(iMes as varchar(2));
    cCampoHaber = 'haber' || cast(iMes as varchar(2));
    cSql = 'update tbsaldoscuentas ' ||
           'set debetotal=debetotal+new.debe, ' ||
           'habertotal=habertotal+new.haber, ' ||
           cCampoDebe  || '=' || cCampoDebe  || '+new.debe, ' ||
           cCampoHaber || '=' || cCampoHaber || '+new.haber ' ||
           'where codigoempresa=codigoempresa ' ||
           'and ejercicio=ejercicio ' ||
           'and codigocuenta=codigocuenta';
/* >>> debug >>> */
/* insert into tbdebug (texto) values (:csql); */
/* <<< debug <<< */
    execute statement cSql;
  end

/* esto funciona */
/*
    update tbsaldoscuentas
    set debetotal  = debetotal  + new.debe,
        habertotal = habertotal + new.haber,
        debe12  = debe12  + new.debe,
        haber12 = haber12 + new.haber
    where codigoempresa=codigoempresa
    and ejercicio=ejercicio
    and codigocuenta=codigocuenta;
*/
end
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
(SQL) Porqué usar parámetros en lugar de concatenar... Neftali [Germán.Estévez] La Taberna 3 27-01-2010 16:12:16
Como bloquear registros sin usar campos persistentes uper MS SQL Server 2 11-07-2007 18:10:06
usar variables de otras units anubis Varios 7 16-04-2007 09:24:04
DBGrid con campos variables mayte mtz SQL 9 15-11-2005 23:12:58
usar querys en lugar de tablas maruenda Varios 4 18-02-2004 23:03:13


La franja horaria es GMT +2. Ahora son las 13:25:24.


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