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 :

Récupérer la valeur d'un champ auto increment dans Firebird


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    mls
    mls est déconnecté
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 18
    Par défaut Récupérer la valeur d'un champ auto increment dans Firebird
    Bonjour,

    J'ai un projet Delphi où j'insère un enregistrement dans une table ayant au auto increment en clé primaire.
    J'aimerai récupérer cette valeur de l'auto increment lorsque je viens de l'ajouter dans la table.

    Avec l'outil IBExpert, pas de problème, cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ma table (ch1, ch2, ...) VALUES (val1, val2, ....) RETURNING ch1;
    Cette syntaxe me permet de récupérer la valeur de l'auto increment venant d'être inséré (ici "ch1").


    Avec Delphi, voici le code que j'utilise (avec un TSimpleDataSet nommé DT) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    DT.DataSet.CommandText := 'INSERT INTO ma_table (ch1, ch2, ...) VALUES (:val1, :val2, ....) RETURNING ch1';
    ...
    DT.Execute;
    ...
    L'insertion fonctionne parfaitement mais comment récupérer la valeur de l'auto increment venant d'être inséré dans "ch1" ?

    Merci beaucoup d'avance...

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Salut;

    je crois que tu peux la retrouver dans l'évènement beforeinsert ou beforepost.
    mais j'ai une remarque à faire, en général on n'utilise pas un champ auto incrément comme clé primaire c'est très difficile à maintenir surtout si tu fais des suppressions que ce champ est utilisé dans des relations maitre détail.

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Salut;
    mais j'ai une remarque à faire, en général on n'utilise pas un champ auto incrément comme clé primaire c'est très difficile à maintenir surtout si tu fais des suppressions que ce champ est utilisé dans des relations maitre détail.
    Et pourquoi donc est ce si difficile à maintenir ?
    La gestion des relations maitre/détail doit être mis au niveau de la base de donnée.
    mls >>>
    Le truc que je fais tous les jours c'est de récupérer la valeur du générateur avant l'insertion, et d'utiliser cette valeur dans les insertions.

    A+

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Citation Envoyé par Andry Voir le message
    Et pourquoi donc est ce si difficile à maintenir ?
    j'expose le problème de suppression qui entraine un décalage et pour y remédier on fait un compactage ou un ordonnancement, comment tu fais si tu as une relation maître/détail basé sur ce champ sachant que tu restructure ta base de données après les suppressions ?

  5. #5
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    j'expose le problème de suppression qui entraine un décalage et pour y remédier on fait un compactage ou un ordonnancement, comment tu fais si tu as une relation maître/détail basé sur ce champ sachant que tu restructure ta base de données après les suppressions ?
    Généralement, ma clé primaire est juste un nombre sans signification particulier au niveau de ma table; dans la relation maitre/détail, la suppression est géré en cascade grâce à la contrainte imposé.

    Ceci dis, chacun à ses méthodes .

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Citation Envoyé par Andry Voir le message
    Généralement, ma clé primaire est juste un nombre sans signification particulier au niveau de ma table; dans la relation maitre/détail, la suppression est géré en cascade grâce à la contrainte imposé.

    Ceci dis, chacun à ses méthodes .
    c'est pour cela que je dis qu'il faut éviter

  7. #7
    Expert confirmé
    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 : 62
    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
    Par défaut
    Salut

    Citation Envoyé par mls Voir le message
    L'insertion fonctionne parfaitement mais comment récupérer la valeur de l'auto increment venant d'être inséré dans "ch1" ?
    Tu dois considérer cette valeur retournée comme un champ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    DT.DataSet.CommandText := 'INSERT INTO ma_table (ch1, ch2, ...) VALUES (:val1, :val2, ....) RETURNING ch1';
    ...
    DT.Execute;
    ID := DT.FieldByName('ch1').AsInteger;
    @+ Claudius

  8. #8
    mls
    mls est déconnecté
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 18
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut



    Tu dois considérer cette valeur retournée comme un champ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    DT.DataSet.CommandText := 'INSERT INTO ma_table (ch1, ch2, ...) VALUES (:val1, :val2, ....) RETURNING ch1';
    ...
    DT.Execute;
    ID := DT.FieldByName('ch1').AsInteger;
    @+ Claudius
    En fait, j'y avais déjà pensé mais cela ne fonctionne pas. Une exception est générée comme quoi le champ "ch1" n'existe pas...

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

Discussions similaires

  1. récupérer la valeur d'un champ auto-incrémente
    Par mehdi.cheddani dans le forum VB.NET
    Réponses: 16
    Dernier message: 27/01/2014, 17h39
  2. Récupérer la valeur d'un champs auto incrémenté
    Par jim53 dans le forum Débuter
    Réponses: 2
    Dernier message: 06/12/2013, 21h49
  3. [PHP 5.3] Récupérer la valeur d'un champ auto-incrementé
    Par herve911 dans le forum Langage
    Réponses: 24
    Dernier message: 18/09/2011, 20h59
  4. [AC-2007] Comment récupérer la valeur du dernier numéro auto inséré dans une table ?
    Par marot_r dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2010, 17h17
  5. Réponses: 1
    Dernier message: 20/07/2010, 12h28

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