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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-01-2011
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 21
@-Soft Va por buen camino
Unhappy Que estoy haciendo mal con este trigger

hola

no soy muy experto con esto de los triggers y quisiera que me echen una manito a ver que estoy haciendo mal.

el propósito de este triggers es que después de insertar el encabezado en la tabla, se rellene una serie de tablas de detalles con valores de unos catálogos predefinidos.

aquí les dejo el código de dicho trigger, estoy trabajando con delphi 7, firebird 2.1 e IBExpert.

el error es Parsing Error!

Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER TRIGGER TGR_INSERTA_DETALLES_INFORME FOR TBL_INFORMES_CAB
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable idregistro idnumerico;
declare variable formulario idtexto;
declare variable idservicio idtexto;
declare variable servicio descripcion_d;
declare variable grupo descripcion_b;
begin

  /*Busco el nuevo registro insertado*/
  select first 1 new.id_registro, new.id_form
  from tbl_informes_cab
  into :idregistro, :formulario;


  /*FORMULARIO 67A CON CAMAS*/
  if (:formulario = '67A') then
  begin

      /*CONSULTA EXTERNA 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_ce_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_ce (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                               values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA DATOS VARIOS 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_dv_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_DV (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                               values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA HOSPITALARIA 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_hosp_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_hosp (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA PACIENTES EXTRANJEROS 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_pext_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_pext (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA SALUD REPRODUCTIVA 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_srep_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_srep (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA REPORTE ADMINISTRATIVO-FINANCIERO 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_rafm_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_rafm (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

  end
end
^


SET TERM ; ^

gracias de antemano
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.
Responder Con Cita
  #2  
Antiguo 24-01-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
¿ No te dice el nº de linea donde está el error ?.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 25-01-2011
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 21
@-Soft Va por buen camino
Smile

hola

bueno creo que el asunto tiene que ver, con la sentencia select interna al insert hice otro intento de acondicionar la sentencia y los mismo error Parse error


esto fueron los cambios que realice

Código SQL [-]
SET TERM ^ ;



CREATE OR ALTER TRIGGER TGR_INSERTA_DETALLES_INFORME FOR TBL_INFORMES_CAB
ACTIVE AFTER INSERT POSITION 0
AS
declare variable idregistro idnumerico;
declare variable formulario idtexto;
declare variable idservicio idtexto;
declare variable servicio descripcion_d;
declare variable grupo descripcion_b;
begin

  /*Busco el nuevo registro insertado*/
  select first 1 new.id_registro, new.id_form
  from tbl_informes_cab
  into :idregistro, :formulario;


  /*FORMULARIO 67A CON CAMAS*/
  if (:formulario = '67A') then
  begin

      /*CONSULTA EXTERNA 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_ce_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_ce (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                               values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA DATOS VARIOS 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_dv_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_DV (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                               values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA HOSPITALARIA 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_hosp_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_hosp (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA PACIENTES EXTRANJEROS 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_pext_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_pext (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA SALUD REPRODUCTIVA 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_srep_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_srep (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

      /*CONSULTA REPORTE ADMINISTRATIVO-FINANCIERO 67A*/
      select CODIGO, SERVICIO, grupo FROM vw_servicio_rafm_67a
      INTO :idservicio, :servicio, :grupo;

      insert into tbl_informes_det_rafm (ID_REGISTRO, ID_FORM, CODIGO_SERVICIO, SERVICIO, GRUPO)
                                 values (:idregistro, :formulario, :idservicio, :servicio, :grupo);

  end
end
^


SET TERM ; ^
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.
Responder Con Cita
  #4  
Antiguo 25-01-2011
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 21
@-Soft Va por buen camino
ufff mala mia, no me recordaba que el IBExpert no me a permitido hacer los cambios debido al error y entonces copie en el post anterior el mismo codigo sql y no refleje los cambios que trate de realizar en miras a buscar la solucion


este si es parte del codigo que cambie

Código SQL [-]
/*FORMULARIO 67A CON CAMAS*/
  IF (:formulario = '67A') THEN
  BEGIN

    /*CONSULTA EXTERNA 67A*/
    INSERT INTO tbl_informes_det_ce (id_registro, id_form, codigo_servicio, servicio, grupo)
    VALUES (
    (SELECT :idregistro, :formulario, codigo, servicio, grupo
    FROM vw_servicio_ce_67a));

    /*CONSULTA DATOS VARIOS 67A*/
    INSERT INTO tbl_informes_det_dv (id_registro, id_form, codigo_servicio, servicio, grupo)
    VALUES (
    SELECT :idregistro, :formulario, codigo, servicio, grupo
    FROM vw_servicio_dv_67a);

    /*CONSULTA HOSPITALARIA 67A*/
    INSERT INTO tbl_informes_det_hosp (id_registro, id_form, codigo_servicio, servicio, grupo)
    VALUES (
    SELECT :idregistro, :formulario, codigo, servicio, grupo
    FROM vw_servicio_hosp_67a);

    /*CONSULTA PACIENTES EXTRANJEROS 67A*/
    INSERT INTO tbl_informes_det_pext (id_registro, id_form, codigo_servicio, servicio, grupo)
    VALUES (
    SELECT :idregistro, :formulario, codigo, servicio, grupo
    FROM vw_servicio_pext_67a);

    /*CONSULTA SALUD REPRODUCTIVA 67A*/
    INSERT INTO tbl_informes_det_srep (id_registro, id_form, codigo_servicio, servicio, grupo)
    VALUES (
    SELECT :idregistro, :formulario, codigo, servicio, grupo
    FROM vw_servicio_srep_67a);

    /*CONSULTA REPORTE ADMINISTRATIVO-FINANCIERO 67A*/
    INSERT INTO tbl_informes_det_rafm (id_registro, id_form, codigo_servicio, servicio, grupo)
    VALUES (
    SELECT :idregistro, :formulario, codigo, servicio, grupo
    FROM vw_servicio_rafm_67a);

  END
END
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.
Responder Con Cita
  #5  
Antiguo 25-01-2011
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 21
@-Soft Va por buen camino
perdon por tantos post, es que no le veo cual es el problema. el error producido por IBExpert es:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 30, column 5.
SELECT.



pero e investigado y para hacer un INSERT multiple esta es la sentencia, no se si en firebird hay otra forma de hacerlo.
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.
Responder Con Cita
  #6  
Antiguo 25-01-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No tengo Firebird a mano para probarlo, pero recuerdo que los insert de select se hacen sin VALUES

Código SQL [-]
    INSERT INTO tbl_informes_det_ce (id_registro, id_form, codigo_servicio, servicio, grupo)
    (SELECT :idregistro, :formulario, codigo, servicio, grupo
    FROM vw_servicio_ce_67a));
Responder Con Cita
  #7  
Antiguo 25-01-2011
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 21
@-Soft Va por buen camino
Talking

hola

gracias por responder pues ya resolvi el caso y es que no se puede utilizar VALUES en firebird para Insertar registros masivos y tampo los parentesis,
tampoco se puede o mejor dicho la forma como lo expuse probablemente no sea la correcta para hacer multiples insert en un mismo trigger, lo que hice fue dividir cada insert en un trigger.

aqui dejo la forma de como lo realice:

Código SQL [-]
CREATE OR ALTER TRIGGER TGR_INSERTA_DETALLES_67A_CE FOR TBL_INFORMES_CAB
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE idregistro idnumerico;
DECLARE VARIABLE formulario idtexto;
BEGIN

  /*Busco el nuevo registro insertado*/
  SELECT FIRST 1 NEW.id_registro, NEW.id_form
  FROM tbl_informes_cab
  INTO :idregistro, :formulario;

  /*FORMULARIO 67A CON CAMAS*/
  IF (:formulario = '1') THEN
  BEGIN

    /*CONSULTA EXTERNA 67A*/
    INSERT INTO tbl_informes_det_ce (id_registro, id_form, codigo_servicio, servicio, grupo)
        SELECT :idregistro, :formulario, codigo, servicio, grupo
         FROM vw_servicio_ce_67a;
  END
END

y cada uno lo realice para cada tabla, pero se lo agradezco bastante son muy amables.
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Que estoy haciendo mal ? piolillo Internet 8 28-07-2011 18:23:24
Uso de clases, ¿que estoy haciendo mal? gerardorom C++ Builder 2 26-12-2007 16:35:38
Que estoy haciendo Mal esimon SQL 4 04-07-2006 22:55:25
Que estoy Haciendo mal jostrix PHP 1 01-11-2004 02:29:16


La franja horaria es GMT +2. Ahora son las 15:20:16.


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