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 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Trigger o disparador en delphi-interbase

Hola amigos del club, tengo una consultita.

No soy muy bueno en base de datos; lo unico que he hecho son tablas simples y consultas a las mismas ya que hasta este año me toca en la universidad base de datos. Les comento mi problema:

Tengo un programa pequeño y sencillo que posee un DBGrid conectado a un DataSource-> ibdataset->IBDataBase. Este dbgird muestra nada mas una serie de 10 datos, contyenidos en una tabla de Interbase. hasta aqui todo Ok.

Anteriormente habia posteado un hilo donde preguntaba como hacer que3 la tabla se mostrara en "tiempo real" y claro esta que me refiero a que cuando se ingresara un nuevo registro inmediatamente la aplicacion mostrara el valor. Me dieron la solucion: un disparador o trigger. Pero resulta que no pude hacerlo porque no se como y ya busque en la web y no encuentro nada que yo entienda con mi bajo nivel de conocimientos. Ahora por favor, necesitaria que me indicaran como crear un trigger que al insertar un nuevo registro alertara de alguna forma a la aplicacion "cliente" y esta cerrara y habriera el dataset y asi refrescar el DBGrid.

Gracias amigos y disculpen las molestias.

Enviado desde mi IPad 6G ()
Responder Con Cita
  #2  
Antiguo 07-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Haz una búsqueda por post_event.
Responder Con Cita
  #3  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Eres increible!!!

Hola Casimiro, gracias por responder ahora busco!

Un saludo,
Responder Con Cita
  #4  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Consultita

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Haz una búsqueda por post_event.
Estimado Casimiro, tengo este codigo:

Código SQL [-]
CREATE TRIGGER NUEVO_CLIENTE FOR CLIENTES AFTER INSERT
AS
BEGIN
  POST_EVENT "NEW_CLIENTE";
END

Pero me da el error:

Código:
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
NEW_CLIENTE.

SQL Code: -206
IB Error Number: 335544569
Que puede ser? este error siempre me lo da en cualquiier cosa que haga
Responder Con Cita
  #5  
Antiguo 07-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Y que es NEW_CLIENTE, esta en la tabla?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Gracias

Hola Caral, te comento:

La tabla es asi:

Código SQL [-]
CREATE TABLE CLIENTES (
  CLAVECLIENTE INTEGER NOT NULL,
  NOMBRE VARCHAR(70),
  TELEFONO VARCHAR(15),
  DOCUMENTO VARCHAR(20),
  DIRECCION VARCHAR(100)
)

Este es el link del documento que haye pero no me funciona.

http://www.intitec.com/varios/Firebi...de_eventos.pdf
Responder Con Cita
  #7  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Unos detallles mas...

SOlamente para comentarles: utilizo C++builder XE e Interbase SMP 2009.

Saludos,
Responder Con Cita
  #8  
Antiguo 07-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No he hecho de estos gatitos nunca, asi que no entiendo muy bien como funcionan.
El concepto es relativamente sencillo.
Se crea un disparador de evento y un gatito para la el evento.
La pregunta es:
Segun lo que entiendo lo que pretendes es que lo datos que insertas se vean de inmediato en el dbgrid.
Si es asi, por que usar un gatito, es imperativo ?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Gracias por responder Caral

Hola Caral; el asunto es así:

Imagina que tienes un servidor, un programa cliente para visualizar datos y otro programa por medio del cual una persona ingresa datos a la base de datos.

Si la persona ingresa datos al servidor por medio del programa de ingreso los programas clientes deben de recibir una alerta para actualizar sus datos.

Ese es el concepto, pero nada me funciona y ya me empiezo a sentir idiota
Responder Con Cita
  #10  
Antiguo 07-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo tengo 6 ordenadores conectados a un servidor con firebird.
No uso nada de eso y no he tenido nunca problemas.
Como de esto no se lo que hago es simplemente una consulta a la tabla antes de hacer algun cambio, asi, si alguien ha modificado algo lo puedo solucionar antes.
Tambien uso vistas, que son mas sencillas que los Tiggers, por lo menos para mi.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #11  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
jaja la estaba arruinando

Hola amigos, gracias por su tiempo.
El error que cometia era este:

Código SQL [-]
CREATE TRIGGER NUEVO_CLIENTE FOR CLIENTES AFTER INSERT
AS
BEGIN
  POST_EVENT "NEW_CLIENTE"; //Aqui mi error: no son comillas dobles (") son comillas simples (') 
EN

En el Tutorial aparecia con comillas dobles y bueno grave error pueden verificarlo:

http://www.intitec.com/varios/Firebi...de_eventos.pdf

Gracias por su tiempo y disculpen, la verdad siempre me ayuda muchísimo la gente de este foro.
Responder Con Cita
  #12  
Antiguo 07-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me alegro, ahora la pregunta:
Que hace el tigger?, envia un mensage despues de insertado ?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #13  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Puede ser

Cita:
Empezado por Caral Ver Mensaje
Hola
Yo tengo 6 ordenadores conectados a un servidor con firebird.
No uso nada de eso y no he tenido nunca problemas.
Como de esto no se lo que hago es simplemente una consulta a la tabla antes de hacer algun cambio, asi, si alguien ha modificado algo lo puedo solucionar antes.
Tambien uso vistas, que son mas sencillas que los Tiggers, por lo menos para mi.
Saludos
Hola Caral, gracias por responder;

Bueno la verdad nunca he usado vistas; pero lo que sucede es esto, cuando los datos son sumamente necesarios para la toma de decisiones deben ser en tiempo real. Si se coloca un timer que tenga como labor abrir y cerrar cada cierto tiempo los dataset para actualizar el DBGrid estarias cada minuto por ejemplo estarias abusando un poco del trafico de red, ademas: recibirias los datos un minuto despues de que el usuario de ingreso inserto los datos. Entonces para evitar esto, le dejo la tarea al servidor para que este le diga al programa "Ya me ingresaron datos" y el programa al recibir el evento habra y cierre el dichoso dataset y actualice en tiempo real. Espero haberme dado a entender ya que me "cuesta" (y mucho )

Gracias nuevamente y un saludo a todos.
Responder Con Cita
  #14  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Exacto

Cita:
Empezado por Caral Ver Mensaje
Hola
Me alegro, ahora la pregunta:
Que hace el tigger?, envia un mensage despues de insertado ?.
Saludos
Si, envia un mensaje a través de un componente llamado (creo) IBEvents; asi en tu aplicacion puedes saber si insertaron, borraron o que se yo

Un saludo amigo (soy muuy novato).
Responder Con Cita
  #15  
Antiguo 07-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si, estoy claro en esto.
Pero como siempre digo, es lo mismo de una que de otra manera.
Si tienes que indicar con un if (como indica el ejemplo que pusiste) cada vez que se hace algun cambio y ademas recurrir al tigger, es lo mismo que hacer una sentencia sql.
Bueno, me alegro que lo solucionaras, eso es lo importante.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #16  
Antiguo 07-01-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Estoy tratando de entender la necesidad de un trigger en este caso y sigo sin entenderlo.
La unica que se me ocurre es en el caso de un solo form (general).
Esto pensando en que se tenga la tabla o dataset activo siempre.
Si se trata de varios forms, no le veo utilidad.
Se que genera un evento con el componente IBEvents, pero que ?, de que sirve ?, me puede actualizar el dataset, pero siempre y cuando este activo, de lo contrario o enviara un error o no hara nada.
No lo entiendo.
Me quedo con mi humilde IBQuery y Sql.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #17  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Vamos a ver...

Te comento, yo no uso mucho los ibquery, de hecho nunca los he utilizado porque utilizo el componente ibdataset el cual me provee de un selectsql y demás funciones.

Ahora bien: imaginemos que tu haces una aplicación con un ibquery>ibtransaction>ibdatabase etc. y bueno tu programa es un control de existencias de productos en stock de un almacén de repuestos para aeronaves de guerra rusa (de los MiG o que se yo ). En ese momento hay dos tenderos trabajando y ambos tienen la lista de misiles en existencia en el monitor., y llega un cliente afgano a una de las cajas de venta y pide: necesito dos misiles Hellfire y dos toneles con gelatina de napalm; acto seguido el tendero ve en su lista que en efecto aun tienen dos misiles. Los despacha junto con el napalm y listo se va ha cocinar. Ahora llega otro con el otro tendero y este tenía activa la ventana de misiles, le piden un misil Hellfire y este dice tener dos; en efecto no hay ya ninguno en existencia, si le da refrescar o cierra y habré la ventana de existencias mostraría cero en existencias pero al no haberlo hecho dice tener dos misiles. Si estas personas hubiesen tenido el famoso trigger que mencionamos aquí, inmediatamente al modificar u/o eliminar la existencia de dichos misiles en stock se hubiera disparado un evento el cual refrescaría todos los programas cliente y al llegar el segundo cliente le habrían dicho que ya no hay misiles en venta.

Espero haberme dado a entender porque como dije anteriormente no es mi fuerte

Un saludo.


Enviado desde mi IPad 3G
Responder Con Cita
  #18  
Antiguo 07-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que un programa que trabaja de esa forma está mal planteado. No se tiene una ventana abierta con el stock, ahí todo el rato, eso es algo inútil, sino que cuando se selecciona el artículo es cuando se muestra el stock de ese momento. Cierto que también puede irse en ese momento al baño y cuando regrese ya lo han vendido en otro terminal, pero al aceptar la línea es cuando debería de comprobar el stock de ese momento.
Lo de las dobles comillas en el evento... no me había fijado, tendré que corregirlo
Responder Con Cita
  #19  
Antiguo 07-01-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Ups!!!

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Es que un programa que trabaja de esa forma está mal planteado. No se tiene una ventana abierta con el stock, ahí todo el rato, eso es algo inútil, sino que cuando se selecciona el artículo es cuando se muestra el stock de ese momento. Cierto que también puede irse en ese momento al baño y cuando regrese ya lo han vendido en otro terminal, pero al aceptar la línea es cuando debería de comprobar el stock de ese momento.
Lo de las dobles comillas en el evento... no me había fijado, tendré que corregirlo
Jeje cierto Casimiro, pero es tal cual como menciono la historia: digamos que eran babosos estos cuates y ya tenian en pantalla la existencia de misiles (era solo un ejemplo, como repito soy malisimo para explicarme).

Ahora con lo del documento: ups! lo siento, no sabia que eras el autor pero bueno en fin todos ganamos algo en este hilo y bueno si te sirve de algo: busque y encontre otros ejemplos con comillas y me seguia dando error todo esto ya me habia arrancado todo el cabello
Responder Con Cita
  #20  
Antiguo 08-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No, en este caso no soy el autor, sólo recopilé la información de Erika Martínez (la autora) y lo publiqué en formato pdf.
Ya está cambiado, con comillas simples.
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
Crear Trigger Interbase - Ayuda BlueSteel Firebird e Interbase 6 27-11-2007 23:08:59
Controlar un Disparador al momento de cancelar o eliminar JoanKa Varios 1 30-06-2006 19:00:36
Trigger en interbase afarenas Firebird e Interbase 2 04-12-2004 16:35:04
problema con disparador FB marrullas Firebird e Interbase 2 04-08-2004 00:16:32
Crear un Disparador Desde la Aplicacion DANY Firebird e Interbase 0 12-11-2003 16:30:38


La franja horaria es GMT +2. Ahora son las 18:42: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