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 :

Obtenir le No d'enregistrement àprès insertion ...suite


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut Obtenir le No d'enregistrement àprès insertion ...suite
    J'essayé d'obtenir le No d'enregistrement après insertion de plusieurs données dans une table d'une base de données (Access 2000), table qui porte le nom DOSSIER.

    Dans l'extrait de mon programme suivant .....

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
               //Création d'un nouveau enregistrement dans la table DOSSIER (local)
               ADOTable1.TableName := 'DOSSIER';
               adosqlcommand1.Clear;
               ADOQuery1.SQL.Clear;
     
               adosqlcommand1.Add('INSERT INTO DOSSIER (DOS_EMPR_NOM, DOS_EMPR_PRENOM, CIV_ID)' + ' VALUES(''' + CreationKey + ''',''test'',' + '1' +');');
     
               AdoQuery1.SQL.Text := adosqlcommand1.Text;
               try
                 AdoQuery1.ExecSQL;
               except
                  { A faire : traitement d'erreur }
               end;
               AdoQuery1.Close;
     
               //Lancer une requête pour récupérer la clé de la table DOSSIER (Champ DOS_ID)
               ADOTable1.TableName := 'DOSSIER';
               adosqlcommand1.Clear;
               ADOQuery1.SQL.Clear;
               adosqlcommand1.Add('SELECT (DOS_EMPR_NOM) from DOSSIER' +' WHERE (DOS_EMPR_NOM=''' + 'xp9000creationkey' + ''');');
               AdoQuery1.SQL.Text := adosqlcommand1.Text;
               try
                 AdoQuery1.Open;
               except
                  { A faire : traitement d'erreur }
               end;
     
     
               try
                   //Obtenir le No de l'enregistrment
                   Edit1.Text := IntToStr(AdoQuery1.RecordCount);
                   while not ADOQuery1.EOF do
                   begin
                        // Et voila la ligne suivante qui fait planter mon programme.
                        DOS_ID := ADOQuery1.Fields.FieldByName('DOS_ID').AsInteger;
                        ADOQuery1.Next;
                   end;
                   AdoQuery1.Close;
     
               except
                  { A faire : traitement d'erreur }
               end;
    il se produit une erreur sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           DOS_ID := ADOQuery1.Fields.FieldByName('DOS_ID').AsInteger;
    avec le message suivant:




    Explication : DOS_ID est la clé primaire de la table DOSSIER. C'est une clé auto-incrémenté, et elle existe bien dans la table contrairement à ce que le message dit!

    Ma question : Comment éviter cette erreur :

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    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
    Par défaut
    Si je ne me trompe pas, c ca ta deuxieme requete:

    SELECT (DOS_EMPR_NOM) from DOSSIER' +' WHERE (DOS_EMPR_NOM=''' + 'xp9000creationkey' + '''

    apres son execution tu essaye de lire le contenu du champ DOS_ID que tu n'as jamais recupéré:

    DOS_ID := ADOQuery1.Fields.FieldByName('DOS_ID').AsInteger;

    alors tu veux eviter l'erreur? recupere le champ:

    SELECT DOS_EMPR_NOM, DOS_ID from DOSSIER' +' WHERE (DOS_EMPR_NOM=''' + 'xp9000creationkey' + '''

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Bonjour,

    Une remarque en passant.

    DOS_ID := ADOQuery1.FieldByName('DOS_ID').AsInteger;
    est également correct.

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut
    Réponse à SegmentationFault:

    Bingo

    Tu à raison, c'est la requête SQL qui à été erroné.


    Voiçi le bon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    adosqlcommand1.Add('INSERT INTO NET_MANAGER (I_DB_ID, DOS_ID)' + ' VALUES(''' + I_DB_ID + ''', ' + IntToStr(DOS_ID) +');');
    Merci aussi à Pascal Jankowski pour ta réflexion

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/07/2006, 16h13
  2. MySQL: obtenir les résultats de la dernière insertion
    Par TNorth dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/05/2006, 17h44
  3. Requete pour obtenir les 25 premiers enregistrement
    Par dbizier dans le forum Oracle
    Réponses: 1
    Dernier message: 28/04/2006, 21h36
  4. [VBA-E]Obtenir la date d'enregistrement d'un classeur fermé
    Par Sylvain2003 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/03/2006, 14h36
  5. [MySQL] Vérification de la présence d'enregistrement avant insertion
    Par Odilon dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/09/2005, 15h30

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