[Interbase6] Problème de triggers

cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005 - 7 mars 2005 à 12:21
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006 - 11 mars 2005 à 11:57
bonjour,





j'utilise Interbase 6 et je voudrais savoir comment faire pour faire un trigger de suppression.


voila j'explique


j'ai 2 tables "lot" et "produit"


dans mon application delphi je supprime le produit dans lot


je voudrais apres avoir supprimer ce produit de ma table "lot" , le supprimer de ma table "produit" avec un trigger


comment dois je faire?





avec Sql Server, ma suppression serai dans une table créer par SQl Serveur appelé 'deleted'


est ce le meme fonctionnement avec Interbase? serait ce pas 'old'?


merci de votre aide





Cordialement

>>>> "Le génie n'existe pas sans un grain de folie"

3 réponses

vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
9 mars 2005 à 12:31
Utilise l'intégrité référentielle entre tes deux tables et ajoute un
event on delete dans ta table lot de telle manière que le record
associé dans la table produit soit également effacer.



Personnellement, je me sert des triggers à l'insertion de nouveau record en association avec un generator.

Voici un exemple de code sql :

CREATE TABLE "SMS"

(

"ID" INTEGER NOT NULL,

"IDINCIDENT" INTEGER,

"IDAVIS" INTEGER,

"TEXTE_SMS" VARCHAR(1000),

"DATE_SMS" DATE,

"PAS_LU" "LOGICAL",

"EMETTEUR" SMALLINT,

"DESTINATAIRE" SMALLINT,

PRIMARY KEY ("ID")

);

SET TERM ^ ;





CREATE GENERATOR gen_sms;



SET GENERATOR gen_sms to



CREATE TRIGGER "ID_SMS" FOR "SMS"

ACTIVE BEFORE INSERT POSITION 0

as

begin

if (new.id is null) then

new.id = gen_id(gen_sms,1);

end


C'est une table que j'utilise pour que les utilisateurs de mon applicationn puisse s'envoyer des messages, comme un sms.



Avec un composant TIBDataset, tu écris le script SELECTSQL et puis tu
génères automatiquement le code de modif, refresh et effacement.



Voici ce que cela donne :

DELETESQL =

delete from SMS

where

ID = :OLD_ID



INSERTSQL =

insert into SMS

(CREATEUR_AVIS, CREATEUR_INCIDENT, DATE_SMS, ID, IDAVIS, IDINCIDENT,

PAS_LU, TEXTE_SMS)

values

(:CREATEUR_AVIS, :CREATEUR_INCIDENT, :DATE_SMS, :ID, :IDAVIS, :IDINCIDENT,

:PAS_LU, :TEXTE_SMS)



MODIFYSQL =

update SMS

set

CREATEUR_AVIS = :CREATEUR_AVIS,

CREATEUR_INCIDENT = :CREATEUR_INCIDENT,

DATE_SMS = :DATE_SMS,

ID = :ID,

IDAVIS = :IDAVIS,

IDINCIDENT = :IDINCIDENT,

PAS_LU = :PAS_LU,

TEXTE_SMS = :TEXTE_SMS

where

ID = :OLD_ID



Avec param.parabyname('ID') := le ID du record que je veux manipuler tu
signales ou TIBDATASET quel record doit être manipuler puis les
méthodes insert, edit et delete feront le reste pour toi.



J'espère avoir été clair n'hésite pas si tu veux plus d'explications.


Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
9 mars 2005 à 17:24
merci de ce code. je connaissai deja ce code avec generator mais je
n'arrive pas a le faire fonctionner. dans ma requete (j'utilise un
IBQuery) comment dois je faire pour que le generator fonctionne?

par ex



query.SQL.Text:='Insert into lot where (??, 'bonjour')

table lot (nolot, libelle)



comment dois je faire? je dois écrire koi?

je n'est pas tre bien compri ou mettre ca : param.parabyname('ID') := le ID ??

ou dois je le mettre?




>>>> "Le génie n'existe pas sans un grain de folie"
0
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
11 mars 2005 à 11:57
Tu ne dois pas utiliser un IBQuery mais IBDataset.



IBQuery ne permet que de lire la requête écrite dans sa propriété SQL.



IBDataset permet de manipuler la requête écrite dans SELECTSQL

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans
0
Rejoignez-nous