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 :

Erreur ADOQuery : "informations sur la colonne clé insuffisante"


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut Erreur ADOQuery : "informations sur la colonne clé insuffisante"
    Bonjour
    jai un probleme avec Adoquery , quand je veux afficher le resultat d'une requette sur un DBlistbox ca m'affiche un message d'erreur suivant:
    "informations sur la colonne cle insuffisante pour la mise a jour et rafrechisment"
    voila la requette que j'ai mis sur l'inspecteur d'objet de adoquery sur string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select desision_fcb ,count(FCB_employer.id_emp) as 'nbr emp' from FCB  inner join FCB_employer  on FCB.id_fcb=FCB_employer.id_fcb
    where desision_fcb not in (select nom_theme from theme) group by desision_fcb
    et je suis sur sql server 2016

    et le code delphi(XE3) :
    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
    procedure TForm11.Button1Click(Sender: TObject);
    begin
    ADOQuery1.Active:=false;
    ADOQuery1.open;
    self.ADOQuery1.Refresh;
    self.ADOQuery1.ExecSQL;
     
     
    with self.ADOQuery1 do
         begin
           open;
           first;
           while not eof do
               begin
                 dbListBox1.Items.Add(self.ADOQuery1.FieldByName('desision_fcb').AsString + ' '+ self.ADOQuery1.FieldByName('nbr emp').AsString);
     
                 next;
               end;
               first;
         end;
    end;
     
    end.
    merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 619
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je ne me positionnerais pas sur le SQL sensu stricto mais AMHA il y a certainement des améliorations à y faire, c'est plutôt une question à poser sur le Forum Base de Données/SQL
    pour ce qui est du code en revanche, il y a trop de lignes (et de Self) dont beaucoup sont inutiles, et justement entre autre celle qui plante (Refresh)

    * les codes entre <s> sont inutiles
    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
     
    procedure TForm11.Button1Click(Sender: TObject);
    begin
    ADOQuery1.Active:=false; // je ne suis pas sûr du besoin mais l'instruction  pourrait se situer dans le with et avant le open
    <s>
    // ADOQuery1.open;  // vous faites l'ouverture dans le with
    // self.ADOQuery1.Refresh;   // non vous venez juste de l'ouvrir et pire il n'y a pas de clé => l'erreur
    // self.ADOQuery1.ExecSQL; // non vous ne faites pas de modifications
    </s> 
     
    with <s>self.</s>ADOQuery1 do
         begin
           open;
     <s> 
    //      first; // inutile après un open on est toujours au début
    </s>
           while not eof do
               begin
                  dbListBox1.Items.Add(FieldByName('desision_fcb').AsString + ' '+FieldByName('nbr emp').AsString);
                  //  un format aurait été plus "propre"     
                  // dbListBox1.Items.Add('%s %d',[FieldByName('desision_fcb').AsString,FieldByName('nbr emp').AsInteger]);  
                 next;
               end;
               first; 
         end;
    end;
     
    end.

  3. #3
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut
    effectivment ca marche , merci beucoup
    et la je sais pas si je dois ouvrire une autre descution ou la poser ici ,car ca conserne le meme sujet ,
    je veux savoir si je met une listebox normal a la place du dblistebox,et je selectione un item,quelle est l'evenment a utiliser et comment parametrer l'item selectioner pour executer une procedure stocker
    Merci encor

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

Discussions similaires

  1. [XL-2003] Récupérer des informations sur des colonnes et lignes différentes
    Par filsdepub dans le forum Excel
    Réponses: 6
    Dernier message: 18/01/2012, 14h12
  2. Réponses: 2
    Dernier message: 26/07/2010, 11h02
  3. Réponses: 1
    Dernier message: 17/03/2009, 15h58
  4. [MySQL] Erreur sur une colonne
    Par keurdeloup45 dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 01/02/2009, 18h53
  5. Réponses: 2
    Dernier message: 18/03/2008, 13h58

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