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 :

Nom de colonne invalide


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    delphi
    Inscrit en
    Juillet 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : delphi

    Informations forums :
    Inscription : Juillet 2017
    Messages : 27
    Points : 0
    Points
    0
    Par défaut Nom de colonne invalide
    Bonjour,

    J'ai un problème avec ce code et je ne sais comment le résoudre.
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ADODataSet1.Close;
      if ListFiltr1.ItemIndex = 0 then
        ADODataSet1.CommandText :=
          'select [EmployeeID],LastName,FirstName,Title,City from Employees where '
          + ListeChampTxt.Items[ListeChampTxt.ItemIndex] +'= "' + TxtCherche.text +
          '" order by ' + ListTrie.Items[ListTrie.ItemIndex] + TxtTrie;
       ADODataSet1.Active := True;
       ADODataSet1.Requery();
    end;

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Bonjour et bienvenue.

    Première remarque, vous êtes sur un forum de langue française donc évitez de vous exprimez dans la langue de Shakespeare.
    Deuxième remarque, cet étrange Requery (ok, je suis pas fan de ADO) qui me semble totalement inutile puisque juste avant vous faites un active:=true (= à Open)

    Quant à l'erreur : nom de colonne invalide, le [EmployeeID] me parait bizarre mais quel SGBD ? Quel description de table ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    delphi
    Inscrit en
    Juillet 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : delphi

    Informations forums :
    Inscription : Juillet 2017
    Messages : 27
    Points : 0
    Points
    0
    Par défaut le problem est
    Le problème est que ce code donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select [EmployeeID],LastName,FirstName,Title,City from Employees where LastName= "anyname" 
    order by [EmployeeID] Asc
    Et moi je veux ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select [EmployeeID],LastName,FirstName,Title,City from Employees where LastName= 'anyname' 
    order by [EmployeeID] Asc
    Mais je ne sais pas comment modifier.

  4. #4
    Membre actif
    Homme Profil pro
    Consultant AMOA Sénior
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant AMOA Sénior
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 234
    Points
    234
    Par défaut
    Bonjour, (une petite formule de politesse ne nuit pas gravement aux doigts qui l'écrivent)

    Peut-être faut-il utiliser QuotedStr, ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADODataSet1.CommandText :=
          'select [EmployeeID],LastName,FirstName,Title,City from Employees where '
          + ListeChampTxt.Items[ListeChampTxt.ItemIndex] +'= ' + QuotedStr(TxtCherche.text) +
          ' order by ' + ListTrie.Items[ListTrie.ItemIndex] + TxtTrie;
    Bonne journée ...

    Cdt

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    delphi
    Inscrit en
    Juillet 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : delphi

    Informations forums :
    Inscription : Juillet 2017
    Messages : 27
    Points : 0
    Points
    0
    Par défaut merci mi
    Mais j'ai un autre problème dans order by :
    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
    else if ListFiltr1.ItemIndex = 2 then
        ADODataSet1.CommandText :=
          'select [EmployeeID],LastName,FirstName,Title,City from Employees where '
          + ListeChampTxt.Items[ListeChampTxt.ItemIndex] + ' like ' +
          quotedstr(TxtCherche.text) + '%" order by ' + ListTrie.Items[ListTrie.ItemIndex]
          + TxtTrie
      else if ListFiltr1.ItemIndex = 3 then
        ADODataSet1.CommandText :=
          'select [EmployeeID],LastName,FirstName,Title,City from Employees where '
          + ListeChampTxt.Items[ListeChampTxt.ItemIndex] + ' like "%' +
          quotedstr(TxtCherche.text) + '" order by ' + ListTrie.Items[ListTrie.ItemIndex]
          + TxtTrie
      else
        ADODataSet1.CommandText :=
          'select [EmployeeID],LastName,FirstName,Title,City from Employees where '
          + ListeChampTxt.Items[ListeChampTxt.ItemIndex] + ' like "%' +
          quotedstr(TxtCherche.text) + '%" order by ' + ListTrie.Items[ListTrie.ItemIndex]
          + TxtTrie;
     
      ADODataSet1.Active := True;
      ADODataSet1.Requery();
     
     
    end;

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Re,
    ça ne changera pas la face du monde mais en Delphi il existe un case of qui remplacerait joliment ces else if
    avez-vous aussi songé à découper votre commande ?

    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
    const fieldpart : 'select [EmployeeID],LastName,FirstName,Title,City from Employees';
    var wherepart : string;
          orderpart : string;
     
    ...
    Case ListFiltr1.ItemIndex of
      0 : begin
           end;
      1 : begin
           end;
      2 : begin
            // je préfére largement utiliser des format et pouvoir déboguer facilement chaque partie de mon SQL  
            wherepart:= Format('Where %s like %s%%',[ListeChampTxt.Items[ListeChampTxt.ItemIndex], quotedstr(TxtCherche.text)]);
            orderpart:=Format(' Order by %s,%s',[ListTrie.Items[ListTrie.ItemIndex],txttrie]); 
           end;
      ....
     else begin
           end;
    end;
    ADODataset1.Close;
    ADODataSet1.CommandText :=FieldPart+wherepart+orderpart;
    ADODataset1.Open;
    Que contient la variable txttrie ? car dans l'order by les colonnes doivent être séparées par des virgules ?

    une autre remarque votre code fourni une faille d'injection de SQL
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre actif
    Homme Profil pro
    Consultant AMOA Sénior
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant AMOA Sénior
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 234
    Points
    234
    Par défaut
    Bonjour,

    As-tu bien compris et recherché dans la doc à quoi correspond QuotedStr ?

    Ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ' like "%' + quotedstr(TxtCherche.text) + '" order by
    sera en erreur car ici QuotedStr n'est pas utilisé correctement ....

    Dans ton message de 09h54, tu indiquais vouloir cela au niveau de la requête :

    select [EmployeeID],LastName,FirstName,Title,City from Employees where LastName= 'anyname'
    order by [EmployeeID] Asc

    à la place de

    select [EmployeeID],LastName,FirstName,Title,City from Employees where LastName= "anyname"
    order by [EmployeeID] Asc

    Or, dans ton dernier message, tu ne tiens pas compte du fait que tu remets le caractère " dans ta requête ... en appliquant QuotedStr sans avoir compris / recherché ce que faisait cette instruction !

    Recherches ce que fait QuotedStr et tu comprendras pourquoi ta requête est en erreur ...

    Etudies bien la réponse de SergioMaster qui apporte les solutions.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    delphi
    Inscrit en
    Juillet 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : delphi

    Informations forums :
    Inscription : Juillet 2017
    Messages : 27
    Points : 0
    Points
    0
    Par défaut merci pour tout
    Enfin le code marche très bien, merci.

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

Discussions similaires

  1. Nom de colonne invalide
    Par noname122 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 29/07/2014, 12h02
  2. Requête SQL (nom de colonne invalide)
    Par meryba dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2012, 18h02
  3. [JTable] les noms des colonnes de s'affichent pas
    Par macben dans le forum Composants
    Réponses: 6
    Dernier message: 25/04/2008, 12h03
  4. Noms de colonne dans une colonne
    Par Digirom dans le forum Langage SQL
    Réponses: 14
    Dernier message: 23/04/2004, 12h51
  5. Mauvais noms de colonnes lors d'une requête
    Par nmathon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/04/2004, 08h27

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