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 :

[IB] [trigger+generator] récup dernière valeur générée ?


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut [IB] [trigger+generator] récup dernière valeur générée ?
    Bonjour à tous,
    dans mon projet j'uttilises dbexpress & Interbase en local, ca marche très bien.

    J'ai crée des champs auto incrémenté avec IBexpert(Un trigger et un Generator), cela fonctionne bien.
    le champ en question est un id unique défini en clef primaire.

    Après une insertion, IB génère bien l'id, mais je n'ai aucune idée de comment faire pour le récupérer ? connaissant le nom du generator ? par SQL ou y'a t'il une fonction permettant cela ?

    J'ai essayé avec une procedure stockée du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROCEDURE LAST_INSERTED_ID
    RETURNS (
        LAST_INSERTED INTEGER)
    AS
    begin
      LAST_INSERTED = gen_id(gen_utilisateurs_id,1);
    end
    Puis j'ai essayé, grâce à un TSQLStoredProcedure, de récupérer cette valeur, sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataModule1.SQLStoredProc1.Open;
    last_insert_id := DataModule1.SQLStoredProc1.Fields[0].AsInteger;
    ShowMessage('Id généré : '+IntToStr(last_insert_id));
    Merci à vous


    Fred

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    Bjr fred64,

    Le manuel concernant les procédures stocké et les triggers sont dans le fichier pdf à l'adresse suivante: http://levieux.developpez.com/tutops...s/tutopsib.pdf, celà mérite une bonne petite lecture du cours très bien expliqué. A conseillé!!!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    Une info qd mm pour vous, je vous donne un exemple (Devis par exemple) concernant l'incrémentation automatique grâce à la procédure stocké et trigger.

    Code SQL Trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE GENERATOR "GEN_DEVIS_ID";
    Code SQL Procédure stocké:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    COMMIT WORK;
    SET AUTODDL OFF;
    SET TERM ^ ;
     
    /* Stored procedures */
     
    CREATE PROCEDURE "SP_GEN_DEVIS_ID" 
    RETURNS
    (
      "ID" INTEGER
    )
    AS
    BEGIN EXIT; END ^
     
     
    ALTER PROCEDURE "SP_GEN_DEVIS_ID" 
    RETURNS
    (
      "ID" INTEGER
    )
    AS
    BEGIN
      ID = GEN_ID(GEN_DEVIS_ID, 1);
    END
     ^
     
    SET TERM ; ^
    COMMIT WORK;
    SET AUTODDL ON;
    Et le code source en Delphi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    with DataModule do begin 
                SP_Devis.StoredProcName := 'SP_GEN_DEVIS_ID'; 
                SP_Devis.Prepare; 
                   try 
                      SP_Devis.ExecProc; 
                    // si c un nouveau employé, donc le code est vide, alors on peut récupérer le code par exemple 
                      if (ECode.Text = '') then begin 
                         ECode.Text := SP_Devis.ParamByName[0].AsString; 
                         end 
                   finally 
                      SP_Devis.UnPrepare; 
                      QDevis.Close; 
                      QDevis.Open; 
                   end; 
                end;
    Voilà un exemple de code source qui devrait être théoriquement que celà marche.

    Sinon, tu peux toujours voir un démo que j'ai réalisé une procédure stocké pour enregistrement ou la modification avec incrémentation automatique dans le forum develloppez.com à l'adresse suivante: http://www.developpez.net/forums/viewtopic.php?t=188169 et celà marche très bien sans faute.

Discussions similaires

  1. Liste sélectioner la dernière valeur ajoutée par un popup.
    Par guano dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/03/2006, 17h03
  2. Réponses: 7
    Dernier message: 06/03/2006, 12h19
  3. TsqlQuery et récupération de valeur générée
    Par Lucien dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/10/2005, 14h44
  4. [Séquences] Pour récupérer la dernière valeur
    Par tnodev dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 24/05/2005, 11h35
  5. Trigger et récup du raiserror dans page asp
    Par hoover dans le forum Développement
    Réponses: 3
    Dernier message: 19/11/2004, 13h59

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