IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Delphi 2009 et trigger FireBird


Sujet :

Bases de données Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Delphi 2009 et trigger FireBird
    Salut

    voilà, dans ma bd FireBird, j'ai créé un déclencheur dont je veux l'exploiter sous delphi lors d'insertion d'un nouvel enregistrement, ce déclencheur fait un petit calcul pour générer un code dont il doit être attribuer au nouvel enregistrement. mais comme je l'ai jamais fais auparavant je ne sais pas la démarche à suivre malgré que j'ai fais une petite recherche sur le net sauf que j'ai pas aboutit.

    je me retourne vers vous pour m'éclaircir. merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    bonjour,
    Sous Delphi , rien , c'est le moteur de Firebird (ou d'une autre SGBDR) qui fait le travail . Un trigger , contrairement a une procedure n'a pas besoin d'être 'lancé'.

    Récupérer la valeur sous delphi , là par contre , c'est une autre paire de manches !!
    soit tes composants permettent les Querys INSERT récupérant des valeurs (fib 2.5) et alors tant mieux (très peu le permette)
    soit ce n'est pas le cas alors une relecture de l'enregistrement est nécessaire
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    bonjour,
    Sous Delphi , rien , c'est le moteur de Firebird (ou d'une autre SGBDR) qui fait le travail . Un trigger , contrairement a une procedure n'a pas besoin d'être 'lancé'.

    Récupérer la valeur sous delphi , là par contre , c'est une autre paire de manches !!
    soit tes composants permettent les Querys INSERT récupérant des valeurs (fib 2.5) et alors tant mieux (très peu le permette)
    soit ce n'est pas le cas alors une relecture de l'enregistrement est nécessaire
    oui c'est ce que je voulais dire récupérer la valeur du trigger pour pouvoir l'utiliser, donc si j'ai bien compris faudrait que le composant lui même le permette ! ok, je vais essayer avec les composants fib pourvu que je trouve la version qui marche avec delphi 2009.

    par contre j'ai pas bien saisis ta dernière phrase
    soit ce n'est pas le cas alors une relecture de l'enregistrement est nécessaire
    que veux-tu dire par relecture de l'enregistrement ? mon schéma est le suivant, lors d'un ajout je dois récupérer le code généré par le trigger donc l'enregistrement n'a pas encore été créé alors comment le relire sauf si tu parles d'autre chose

    merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    avec n'importe quel bon composant un INSERT ... RETURNING et c'est réglé
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par makowski Voir le message
    avec n'importe quel bon composant un INSERT ... RETURNING et c'est réglé
    alors là j'ai rien pigé
    d'abord le insert pour aboutir a besoin du code généré par le trigger dont je ne sais comment l'exécuter sous delphi donc je me demande qu'est ce qui est réglé ? sauf si tu permets de me simplifier les choses avec un bout de code ou un descriptif du comment.

    merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    d'abord le insert pour aboutir a besoin du code généré par le trigger ...
    Non c'est là ton erreur de raisonnement.
    Lorsque tu fais un insert via une requête INSERT INTO ou via un DataSet (Insert/Append puis Post), le trigger Avant Insertion de ta table va se déclencher (tout seul comme un grand) et alimenter le code dont tu as besoin.

    Si tu passes par une requête INSERT INTO .. RETURNING, comme le suggère Philippe, (voir notes de version ici), tu peux lui demander de te renvoyer la valeur du code. (pas Philippe, l'Insert)

    @+ Claudius.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par makowski Voir le message
    avec n'importe quel bon composant un INSERT ... RETURNING et c'est réglé
    Voilà le hic , les 'bons' composants ne sont pas légion

    que veux-tu dire par relecture de l'enregistrement ? mon schéma est le suivant, lors d'un ajout je dois récupérer le code généré par le trigger donc l'enregistrement n'a pas encore été créé
    je n'avais pas suivi le raisonnement jusqu'au bout

    [Délire non vérifié]
    Ceci dit , si c'est une seule valeur ca peut peut être se contourner en utilisant une 'variable' de Firebird et une interrogation sur RDB$DATABASE
    [/Délire matinal] je préfére quand même les 'bons' composants
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    bonjour

    pourquoi ne pas utiliser dans le trigger un POST_EVENT

    qui pourrait ensuite etre recupere l'info par un composant 'alert' ou event selon les distributeurs ?

    a+
    Merci d'ajouter un sur les tags qui vous ont aidé

  9. #9
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    @SergioMaster : comment utilise-t-on une variable FireBird sous Delphi car je l'ai jamais fais auparavant ? un tuto peut-être que tu peux me filer.

    @dehorter Olivier : un petit exemple si possible ou un tuto qui pourra me guider.

    d'avance merci.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  10. #10
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    @SergioMaster : comment utilise-t-on une variable FireBird sous Delphi car je l'ai jamais fais auparavant ? un tuto peut-être que tu peux me filer.

    @dehorter Olivier : un petit exemple si possible ou un tuto qui pourra me guider.

    d'avance merci.
    aucune de ces deux "solutions" ne sont bonnes
    la bonne c'est vraiment tout simplement d'utiliser http://www.developpez.net/forums/d98...-returning-id/
    http://www.firebirdfaq.org/faq243/
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    ok ok, je viens de voir la doc, l'exemple qu'ils donnent est le suivant :
    INSERT INTO T1 (F1, F2)
    VALUES (:F1, :F2)
    RETURNING F1, F2 INTO :V1, :V2;
    je veux être sûr d'une seule chose, si le trigger se déclenche tout seul et qu'il alimente le insert j'ai pas besoin d'un returning car ce qui m'intéresse c'est que le champ en question soit renseigné.

    autre chose, que dois-je mettre dans la partie value du champ en question puisque c'est le trigger qui s'en occupe sachant que ce champ est "not null".

    merci encore.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  12. #12
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    mais dans ce cas tu n'as même pas besoin de returning
    et ce n'est absolument pas une question pour le forum Delphi
    c'est quoi le code de ton trigger ?
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  13. #13
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par makowski Voir le message
    mais dans ce cas tu n'as même pas besoin de returning
    et ce n'est absolument pas une question pour le forum Delphi
    c'est quoi le code de ton trigger ?
    Re,

    merci mais je crois que je me suis mal expliqué !
    je développe avec Delphi (donc je suis dans le bon forum ) ma bd est FireBird, j'ai créé un trigger sa fonction étant de générer un code celui-ci doit être utilisé lors d'insertion d'un nouvel enregistrement. en lisant les différentes contributions j'ai compris que le trigger se déclenche tout seul en réponse à un append de la table en question. j'ai fais des essais en renseignant les différents champs de ma table sauf celui qui doit être renseigné par le trigger mais ça n'a pas marché ! je ne sais pas où est le problème c'est pourquoi j'ai pensé tout naturellement que j'ai loupé quelque chose entre Delphi - FireBird.

    merci de m'orienter d'avantage.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  14. #14
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    ... ma bd est FireBird, j'ai créé un trigger sa fonction étant de générer un code ...
    Montre-nous le code de ton trigger, pour vérifier que celui-ci fait bien ce que tu attends.

    @+

  15. #15
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    c'est un bout de code assez simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR ALTER trigger tb_courrier_bi0 for tb_courrier
    active before insert position 0
    AS
    begin
      IF ( NEW.CODE_COURRIER IS NULL ) THEN
        NEW.CODE_COURRIER = GEN_ID(GEN_TB_COURRIER_ID,1);
    end
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  16. #16
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    et le générateur "GEN_TB_COURRIER_ID" existe bien ?
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  17. #17
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par ouiouioui Voir le message
    et le générateur "GEN_TB_COURRIER_ID" existe bien ?
    oui, il est bien là.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  18. #18
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    j'ai tenté d'appeler le trigger dans la clause insert comme suit mais ça n'a pas marché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into tb_courrier (code_courrier, code_type, code_famille, date_arrivee, ref, objet, mots_cles, piece_jointe,
    specifite, date_enregistrement, num_enregistrement, chemin_dur)
    values (tb_courrier_bi0, 1, 1, '01/01/2010', '36/ona/dg/2010', 'A/S du recrutement', 'recrutement', '', 'instruction',
    '03/01/2010', '3/2010', 'c:\courrier\intruction_du_01_01_2010.doc');
    ça peut paraitre idiot mais ma connexion est tellement faible que j'ai pas pu récupérer un tuto ou une astuce sur le net donc je vous demande de m'éclairer sur comment faire l'appel du trigger à l'intérieur du insert.

    merci encore.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  19. #19
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    hihi, j'étais tellement bête sur ce coup là que j'ai pas compris qu'il fallait nullement renseigner le champs code_courrier ni le mettre dans la clause insert into ...

    merci à vous tous, je continue à avancer, c'est une belle aventure FireBird, Delphi et application réseau
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 127
    Dernier message: 17/03/2014, 21h58
  2. Delphi 2009, FireBird et TIBDataBase
    Par Just-Soft dans le forum Bases de données
    Réponses: 24
    Dernier message: 16/02/2011, 12h07
  3. pb Delphi 2009 / UIB / firebird
    Par iznogoud_23 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/02/2009, 09h26
  4. Qu'y a t-il dans delphi 2009
    Par BeTuLa dans le forum EDI
    Réponses: 17
    Dernier message: 05/09/2008, 08h46
  5. [DELPHI 2005-FB] Composant Firebird pour Delphi 2005 perso
    Par What dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/05/2006, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo