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'index du dernier élément inséré ?


Sujet :

Bases de données Delphi

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut Comment récupérer l'index du dernier élément inséré ?
    ACCESS 2000 - DELPHI 7 - Composants ADO

    J'utilise Delphi 7 et ses composants ADO pour accéder aux divers tables d'une base de données (Access 2000).

    La commande SQL suivante :

    INSERT INTO
    PERSONNE(NOM,PRENOM,EMAIL,AGE)
    VALUES('DUPONT', 'Bernard', 'b.dupont@developpez.com', 35);

    Ajoute l'enregistrement dans la table d'exemple suivante:

    ID_PERSONNE NOM PRENOM EMAIL AGE
    1454 'JACKSON' 'Samuel Leroy' 'slj@hotmail.com' 53
    1455 'THURMAN' 'Uma' 'ut@freemail.com' 31
    1456 'DUPONT' 'Bernard' 'b.dupont@developpez.com' 35
    Dans cet exemple l'index du dernier enregistrement est 1456.

    Comment faire pour récupérer l'index du dernier élément inséré avec Delphi et (ou) les composants ADO :

    Remarque : j'ai des tables dans ma base de données ou les index sont auto-incrémenté et d'autres ou c'est pas le cas!

    Dans le cas du langage PHP la fonction suivante permet de récupérer l'index du dernier élément inséré : (int) mysql_insert_id()

    Existe t'il un équivalent en Delphi?

    Serait t'il possible de donner un petit exemple avec le code?

    Merci d'avance pour votre aide.

  2. #2
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    si tu fait fait une requete pour recuperer le dernier ID. genre:

    select max(id_personne) from personne

    c sur que ca merchera avec les id auto-incrementés. pour les autres, ce depend de comment tu genere ton id!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Message à segmentationfault

    Merci beaucoup pour l'information.

    Encore une question:

    Imaginons qu'il y à plusieurs personnes (en réseau) qui travaillent sur la même base de données.

    Si il y plusieurs personnes qui effectuent un enregistrement au même moment, est-que l'information qu'on obtiens par la requête est elle toujours fiable à 100 %.

    Si la réponse est non, quel autre méthode utiliser à la place de celle qui à été présenté ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(id_personne) from personne

  4. #4
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Non, la requête qui t'es proposée (select max(id)) n'est pas fiable et ne doit pas être utilisée en réseau, multiposte, internet, etc.
    Comme tu l'as pressenti, si le user A fait l'insert et lance la requête Max(id) alors que le user B fait passer son insert dans ce laps de temps, la requête lancée par A retournera l'ID de B ...

    Il n'y a pas "d'astuce" spéciale pour ton cas..
    La seule chose possible est de mémorisé les champs de la ligne insérée (hors l'ID que tu ne connais pas donc) et de faire une requête SELECT sur l'ensemble des champs en égalité, ce qui te retournera l'enregistrement et te permettra de lire l'ID.
    Mais attention, cette méthode n'est pas fiable si, dans ton application, il peut exister des doublons parfaits.. (même nom, même prénom, même autres infos).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    Merlin, merci pour les informations.

    J'utilise les composants MDAC (MySQL DATA ACCESS COMPONENTS)
    qui permetant de gèrer une ou plusieurs base(s) de données MySQL avec Delphi biensur.

    MDAC propose une fonction qui permét d'obtenir la valeur de l'index du dernier élément inséré dans une base de données.

    Voici le code:

    Je ne peux pas y croire qu'il n'existe pas une fonction equivalent pour les composants ADO perméttant d'y retourner l'index du dernier élément enregistré :
    Il doit y exister une méthode fiable pour obtenir cette information ....

Discussions similaires

  1. [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
  2. Réponses: 4
    Dernier message: 26/10/2006, 12h57
  3. Réponses: 4
    Dernier message: 01/05/2006, 23h02
  4. Comment récupérer l'index du curseur dans une TStringGrid ?
    Par Sydaze dans le forum Composants VCL
    Réponses: 2
    Dernier message: 26/04/2005, 09h17
  5. Réponses: 5
    Dernier message: 01/02/2005, 17h29

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