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

 Firebird Discussion :

GTT et générateur dans FB 2.5


Sujet :

Firebird

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut GTT et générateur dans FB 2.5
    Bonjour

    Je crée une global temporary table avec un générateur et un trigger.

    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
     
    CREATE GLOBAL TEMPORARY TABLE LATEMP (
      ID INTEGER NOT NULL,
      NOM VARCHAR(12))
    ON COMMIT PRESERVE ROWS;
     
     
    ALTER TABLE LATEMP ADD PRIMARY KEY (ID) USING INDEX RDB$PRIMARY2;
     
    /* Definition for the `LATEMP_ID_GEN` generator :  */
     
    CREATE GENERATOR LATEMP_ID_GEN;
     
    /* Definition for the `BI_LATEMP_ID` trigger :  */
     
    SET TERM ^ ;
     
    CREATE TRIGGER BI_LATEMP_ID FOR LATEMP
    ACTIVE BEFORE INSERT
    POSITION 0
    AS
    BEGIN
      IF (NEW.ID IS NULL) THEN
          NEW.ID = GEN_ID(LATEMP_ID_GEN, 1);
    END^
    Dans mon application, quand j'ajoute une ligne en ne mettant qu'un nom, je ramasse une erreur me disant que l'ID doit être fourni.
    Dans SQL Manager, le colonne ID reste à null mais je peux ajouter autant de lignes que je veux.

    Question: les autoincrement sont-ils possibles dans le GTT ou faut-il gérer ça autrement ?


    Je me dois de compléter :
    Mon programme est en Delphi. En fait, c'est l'utilisation directe d'un composant Table de Firedac qui pose problème.
    Si je fais un insert SQL, ça fonctionne.

    Le problème ne vient donc sans doute pas de Firebird lui-même.

    Je laisse le sujet ouvert jusqu'à demain et je cherche côté Delphi en attendant.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Dans mon application, quand j'ajoute une ligne en ne mettant qu'un nom, je ramasse une erreur me disant que l'ID doit être fourni.
    En fait, c'est l'utilisation directe d'un composant Table de Firedac qui pose problème.
    Si je fais un insert SQL, ça fonctionne.
    je dirais que ça vient de ta FDTable où tu as indiqué le champ id comme obligatoire.
    [Edit]
    • je ne m'en souvenais pas, un petit test ce matin confirme, si tu déclares les champs FDTable1ID à la propriété required:=true
    • il y a certainement pas mal d'options au niveau de la table qui permettent que cette propriété ne soit pas mise par défaut lorsque l'on créé ces champs, mais il y en a tant que je ne connais pas toutes les arcanes de Firedac.


    Dans SQL Manager, le colonne ID reste à null mais je peux ajouter autant de lignes que je veux.
    no comment
    Question: les autoincrement sont-ils possibles dans le GTT ou faut-il gérer ça autrement ?
    pour ce que j'en sais il n'y a aucune restriction à ce sujet
    Restrictions: GTTs can be “dressed up” with all the features and paraphernalia of ordinary tables (keys, references, indices, triggers...) but there are a few restrictions:

    GTTs and regular tables cannot reference one another.

    A connection-bound (“PRESERVE ROWS”) GTT cannot reference a transaction-bound (“DELETE ROWS”) GTT.

    Domain constraints cannot reference any GTT.

    The destruction of a GTT instance at the end of its life cycle does not cause any before/after delete triggers to fire.
    [Edit] un test rapide avec Flamerobin vient de me le confirmer

    Le problème ne vient donc sans doute pas de Firebird lui-même.
    je confirme

    [EDIT] une dernière chose qui me vient à l'esprit ce matin , j'utilise toujours une connexion “PRESERVE ROWS” , je me méfie un peu de l'autocommit de Firedac et n'ai jamais de ce fait fait de test avec une GTT "DELETE ROWS"
    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
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    ça confirme que Firebird n'y est pour rien.

    Je vais voir comment je peux adapter le code source du projet.

    Merci pour ton aide

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

Discussions similaires

  1. utiliser ajax dans un générateur
    Par cortex024 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/06/2007, 16h27
  2. [HTML] générateur de slash dans code html
    Par Tanebisse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/03/2007, 19h47
  3. Condition "si" dans le générateur d'expression
    Par Guizbizet dans le forum Access
    Réponses: 4
    Dernier message: 21/12/2006, 12h52
  4. Générateur d'expression dans un module d'Access 2000
    Par Littlekevin dans le forum Access
    Réponses: 7
    Dernier message: 11/12/2006, 09h44
  5. Critère dans un Générateur de requète
    Par Mario Rousson dans le forum Access
    Réponses: 1
    Dernier message: 09/02/2006, 15h29

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