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 la valeur @@Identity ?


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut Comment récupérer la valeur @@Identity ?
    Hi,

    Je n'arrive pas à récupérer la valeur @@Identity à partir de Delphi. La valeur inexorablement retournée est 0 alors que des enregistrements ont bien été ajoutés dans ma table.

    Environnement : MySQL 5.1 (tables InnoDB), composants dbExpress, application multi-niveaux.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function TfrmCtrClient.RecupAutoInc: Integer;
    begin
      with SQLQuery do begin
        Close;
        with SQL do begin
          Clear;
          Add('SELECT @@Identity');
        end;
        Open;
        RecupAutoInc:=FieldByName('@@Identity').AsInteger;
      end;
    end;
    Une solution ?

    Merci.



    JJE

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut
    Ola,

    J'ai trouvé ! Cela m'a pris quelques heures de recherche sur internet, mais j'ai trouvé !

    La variable @@Identity, ou LAST_INSERT_ID(), renvoit toujours la dernière valeur d'un champ Auto_Increment pour une connexion déterminée. Cela signifie que si deux utilisateurs, ayant leur propre connexion, ajoutent au même moment un enregistrement dans une même table, chacun récupérera sa propre valeur @@Identity. C'est bien pensé !

    Le souci, c'est que pour chaque query exécuté par les composants dbExpress, TSQLConnection réinitialise les connexions. Ces réinitialisations font malheureusement perdre les valeurs @@Identity que l'on souhaitait récupérer.

    La réinitialisation des connexions dépend de la propriété TSQLConnection.AutoClone, dont la valeur par défaut est à True. Pour solutionner les problèmes, il suffit donc, dans l'évènement TSQLConnection.BeforeConnect, de passer la propriété AutoClone à False ce qui aura pour conséquence d'éviter les réinitialisations intempestives de connexions.

    Si vous saviez le nombre de posts que j'ai vu à ce sujet sur les différents forums que j'ai visités et qui sont restés sans réponse !



    JJE

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

Discussions similaires

  1. Comment récupérer la valeur de Expr1 dans une requête ?
    Par Tchupacabra dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 16h16
  2. Réponses: 1
    Dernier message: 21/11/2005, 13h07
  3. Réponses: 7
    Dernier message: 15/09/2005, 07h37
  4. Comment récupérer la valeur d'un dbGrid dans des fenêtres MDI ?
    Par sylvie cl dans le forum Composants VCL
    Réponses: 5
    Dernier message: 19/07/2005, 14h42
  5. Réponses: 3
    Dernier message: 22/01/2005, 23h06

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