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

C++Builder Discussion :

TADOCommand + Pointeur sur l'enregistrement + affichage


Sujet :

C++Builder

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut TADOCommand + Pointeur sur l'enregistrement + affichage
    Bonjour,

    J'insère en SQL des donnéees dans ma bdd ACCESS via un composant TADOCommand. Mais je ne trouve pas dans la doc comment récupérer l'identifiant unique (numéro auto) de mon nouvel enregistrement. Quelqu'un sait comment faire pour connaitre l'id généré automatiquement et forcer la mise à jour de mon GRID qui n'affiche pas les nouveaux enregistrements ?

    J'espère avoir été clair

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut Trouvaille
    J'ai trouvé une solution qui répond à mes problèmes:

    - J'utilise un composant TADOQuery, le TADOCommand est utile mais pour exécuter une requête simple sans avoir besoin de traiter les informations. Du coup, le composant Query offre un ensemble de méthodes et attributs utile.

    - Après un insert mon datasource se positionne directement sur le dernier enregistrement, toujours en utilisant le TQuery.

    - Maintenant pour récupérer l'ID voilà comment j'ai procédé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    // asSQL = SELECT * FROM CLIENT
    AnsiString InterfaceBD::ExecSQLInsertQuery(TADOQuery *query, AnsiString asSQL, struct Client client)
    {
            query->Active = false;
            query->SQL->Clear();
            query->SQL->Add(asSQL);
            query->Active = true;
            query->Insert();
            query->FieldByName("NomClient")->Value=         client.asNom;
            query->FieldByName("PrenomClient")->Value=      client.asPrenom;
            query->Post();
     
            //-- On retourne l'ID ajouté
            AnsiString asID = query->FieldValues["idClient"];   
            return asID;
    }
    [/b]

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Je me permets de prolonger un peu ce post car j'avais utilisé la même méthode (aussi avec TADOQuery et MS Access) et rencontré qq problèmes.

    Parfois la valeur retournée de l'ID était NULL alors même que l'enregistrement était correctement effectué. J'ai donc dû forcer le rafraichissement de la requête avec le code suivant (pour ne pas perdre l'enregristement courant):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     dbRecords->Post();                    // Save changes
     
      // Update changes
      TBookmark oldRec=dbRecords->GetBookmark();
      dbRecords->Requery(TExecuteOptions());
      if (dbRecords->BookmarkValid(oldRec)) {
        dbRecords->GotoBookmark(oldRec);
        dbRecords->FreeBookmark(oldRec);
      }

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut
    Merci pour l'exemple, je n'avais jamais utilisé les TBookmark, je vois mieux à quoi ils servent.

    ++

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2012, 19h35
  2. Placer le pointeur d'un recordset sur un enregistrement
    Par yannick9 dans le forum VBA Access
    Réponses: 4
    Dernier message: 29/08/2007, 16h30
  3. Réponses: 15
    Dernier message: 25/06/2007, 09h35
  4. TADOCommand + Pointeur sur l'enregistrement + affichage
    Par kurkaine dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/11/2005, 06h02
  5. [Syntaxe] Pointeur sur enregistrement : syntaxe exacte
    Par phplive dans le forum Langage
    Réponses: 8
    Dernier message: 18/04/2005, 21h38

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