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
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
Bonjour,
Quel est le SGBD ciblé par cette instruction d'insertion ?
Philippe.
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
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.
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
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
Bonjour,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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager