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 :

Comment récupérer l'ID d'un nouveau record (ODBC XE2)


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut Comment récupérer l'ID d'un nouveau record (ODBC XE2)
    Bonjour
    Comment peut-on récupérer L'id du nouvel enregistrement créé par un SQL insert
    J'utilise DB Express avec Tsqlconnexion et Tsqldataset

    D'avance merci

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Quel est le SGBD ciblé par cette instruction d'insertion ?
    Philippe.

  3. #3
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    merci de suivre cette discussion
    J'utilise Mysql.

    Comme je ne parviens pas a l'utiliser directement sous Delphi XE2 donc je passe par odbc

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Un rapide coup d’œil à la FAQ Mysql Champs auto-incrémentés vous aurait donnée la solution...
    Plus précisément, on a la commande SELECT LAST_INSERT_ID() à exécuter immédiatement après l'insertion.
    Philippe.

  5. #5
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut merci
    je ne connaissais pas ce Last_Insert_ID.
    Je pensais que c’était un problème ODBC et non Mysql
    Je vais essayer cela.
    Merci

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,

    Plus précisément, on a la commande SELECT LAST_INSERT_ID() à exécuter immédiatement après l'insertion.
    bonjour,
    peut être un HS, mais voici un retour d'expérience (avec une autre SGDB) mais le principe reste le même.

    je repose le contexte :
    une table personne :
    - avec PK (primary key) sur ID
    - trigger sur before insert qui fait un gen_id.next val

    ensuite nous avons une function stockée (PERSONNE_I) qui fait un insert avec un ID nul (trigger qui gere) , puis retourne le dernier ID avec une fonction similaire LAST_INSERT_ID.

    jusque là, si vous suivez, c'est nickel

    là ou l'on peut avoir des problémes, c'est ici :
    un client A appelle PERSONNE_I
    PERSONNE_I fait un insert ( => incrémentation du PK)
    un client B appelle PERSONNE_I
    PERSONNE_I fait un insert ( => incrémentation du PK)
    PERSONNE_I du client A fait appel à LAST_INSERT_ID pour retourner l'ID
    PERSONNE_I du client B fait appel à LAST_INSERT_ID pour retourner l'ID

    l'ID retourné au client A et B est identique

    jerome

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par jeromelef2 Voir le message
    l'ID retourné au client A et B est identique
    Je pense que l'appel à "last_insert_id" s'est fait alors que les 2 transactions associées aux insertions étaient validées (commitées). Les insertions étaient peut-être même autocommitées. La valeur retournée correspond donc à la dernière insertion réalisée quelquesoit le client qui la demande...

    Je reviens d'ailleurs sur ma réponse précédente car j'ai employé l'expression "à exécuter immédiatement après" de manière maladroite. J'aurais du dire "dans le cadre d'une même transaction"
    Philippe.

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Je pense que l'appel à "last_insert_id" s'est fait alors que les 2 transactions associées aux insertions étaient validées (commitées). Les insertions étaient peut-être même autocommitées.
    ( ou alors il y avait la propriété pour lire ce qui n'était pas encore commité)je ne m'en souviens plus

    Citation Envoyé par Ph. B. Voir le message
    La valeur retournée correspond donc à la dernière insertion réalisée quelquesoit le client qui la demande...

    Je reviens d'ailleurs sur ma réponse précédente car j'ai employé l'expression "à exécuter immédiatement après" de manière maladroite. J'aurais du dire "dans le cadre d'une même transaction"
    d'accord avec ça

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/07/2011, 10h45
  2. Réponses: 3
    Dernier message: 10/05/2010, 20h19
  3. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  4. Comment récupérer le VK_TAB ?
    Par henderson dans le forum C++Builder
    Réponses: 5
    Dernier message: 11/12/2002, 11h32
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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