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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola a todos,

el problema qyue estás planteando no es el mismo que me ocurrió en esta ocasión ??

http://www.clubdelphi.com/foros/show...cute+statement

Si no recuerdo mal, el problema es que el execute statement no puede resolver las variables new.campo y old.campo fuera del ámbito del store p. o del trigger.

No estoy del todo seguro de si estamos itentando hacer lo mismo... ( es que es domingo por la tarde , haceos cargo ).

Ya me direis, ...

Saludos y suerte
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #2  
Antiguo 19-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues parece que sí, que es similar, el caso es que execute statement necesita la cadena completa, no se le puede pasar un campo para que obtenga el valor del mismo. En fin, no es muy práctico pero parece que va bien así:

Código SQL [-]
CREATE OR ALTER trigger tbapuntes_ai1 for tbapuntes
active after insert position 1
AS
  declare variable iMes integer;
  declare variable cCampoDebe  varchar(8);
  declare variable cCampoHaber varchar(8);
  declare variable cSql        varchar(1024);
  declare variable cValorDebe  varchar(18);
  declare variable cValorHaber varchar(18);
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));
    cValorDebe  = cast(new.debe  as varchar(18));
    cValorHaber = cast(new.haber as varchar(18));

    cSql = 'update tbsaldoscuentas '||
           'set debetotal=debetotal+'||cValorDebe||
           ',habertotal=habertotal+'||cValorHaber||','||
           cCampoDebe  || '=' || cCampoDebe  || '+'||cValorDebe||','||
           cCampoHaber || '=' || cCampoHaber || '+'||cValorHaber||
           ' where codigoempresa='||cast(new.codigoempresa as varchar(18))||
           ' and ejercicio='||cast(new.ejercicio as varchar(18))||
           ' and codigocuenta='||''''||new.codigocuenta||'''';
/* --- debug --> */
/* insert into tbdebug (texto) values (:csql);*/
/* <-- debug --- */
    execute statement cSql;
  end
end
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
(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 16:57:06.


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