Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Obtener el nombre de la tabla desde un trigger (https://www.clubdelphi.com/foros/showthread.php?t=50167)

JoseAntonio 09-11-2007 22:25:55

Obtener el nombre de la tabla desde un trigger
 
Hola, necesito obtener en Firebird, desde el codigo del trigger, el nombre de la tabla a la que pertenece el trigger, alguien conoce alguna constante o variable que me de esa informacion? lo necesito asi por que el trigger sera copiado a muchas otras tablas y me facilitaria la tarea, gracias saludos.

Lepe 09-11-2007 22:39:30

Pues no lo sé.

Se me ocurre usar un programa delphi con un IBScript, desde allí sería muy fácil incluir esa variable y ejecutar el Script dentro de un bucle (creando físicamente los trigger en la BD).

Los nombres de las tablas podrías sacarlo del objeto TDatabase, mira sus métodos con el code insight.

Saludos

jhonny 09-11-2007 23:07:37

Bueno, tambien si hacemos una simple consulta a RDB$TRIGGERS podriamos traer ese dato asi:

Código SQL [-]
select RDB$RELATION_NAME from RDB$TRIGGERS where RDB$TRIGGER_NAME='Nombre_del_trigger'

JoseAntonio 09-11-2007 23:20:29

Cita:

Empezado por jhonny (Mensaje 245131)
Bueno, tambien si hacemos una simple consulta a RDB$TRIGGERS podriamos traer ese dato asi:

Código SQL [-]

select RDB$RELATION_NAME from RDB$TRIGGERS where RDB$TRIGGER_NAME='Nombre_del_trigger'


Es posible... sin embargo como obtengo el nombre del trigger desde el codigo del mismo trigger?

Al González 10-11-2007 03:32:25

¡Hola a todos!

Cita:

Empezado por JoseAntonio (Mensaje 245135)
Es posible... sin embargo como obtengo el nombre del trigger desde el codigo del mismo trigger?

Bueno, si ya estás dentro del disparador ("trigger" es disparador en inglés), se supone entonces que conoces su nombre nombre.

¿Será que tienes un procedimiento almacenado al que llamas desde disparadores de diferentes tablas, y es dentro de él donde necesitas el dato? Si ese es el caso, la solución sería que el procedimiento reciba un parámetro indicando el nombre de la tabla en cuestión.

Aunque sería muy chévere que desde cualquier procedimiento pudiéramos saber si estamos o no en el contexto de un disparador y el nombre de éste. Más concretamente, qué tabla "ha llamado" a nuestro procedimiento.

Ignoro si alguna base de datos tiene esa capacidad.

No dejes de exponer los progresos del caso.

Al González. :)

Lepe 10-11-2007 11:10:09

Yo insisto en mi método, ya que sería extremadamente fácil, te pongo un ejemplo con generadores, que es más cortito:

Código Delphi [-]
const sql = ' Create generator id%s ; ';
var Tablas:TStringlist;
      i:integer;
begin
  tablas := TSTringlist.create;
  database1.GetTablenames(tablas);
  for i:=0 to tablas.count-1 do
    script1.script.add(Format(sql, [tablas[i]]);

  script1.Execute; // hecho, creados tantos generadores como tablas tengamos
  tablas.free;
end;

El script quedaría así:
Código SQL [-]
Create generator idNombretabla1 ; 
Create generator idNombretabla2 ; 
Create generator idNombretabla3 ; 
Create generator idNombretabla4 ;

En lugar de añadir las cosas directamente al script, podemos tener un memo, donde verificamos las cosas e incluso podamos añadir más sentencias.

En este programa solo necesitas un Tdatabase, un transaction y tu ventana principal con el memo.

Tendrías las mismas posibilidades que en IB Expert, creando, eliminando triggers, etc.

Saludos


La franja horaria es GMT +2. Ahora son las 03:17:49.

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