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

Delphi Discussion :

Problèmes de champs dans SQL


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 219
    Par défaut Problèmes de champs dans SQL
    Bonjour,
    Je crois avoir déjà posé cette question, sans réponse satisfaisante.
    Lorsque je fais une requête SQL genre SELECT DISTINCT <colonne) FROM <table> j'ai un message d'erreur me réclamant TOUS les champs de ma table, les uns après les autres. Au bout du compte je n'ai pas le résultat attendu !
    Voilà c'est tout.
    Merci. Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 402
    Par défaut
    Bonjour,
    Peux-tu nous donner la requête exacte qui pose problème ?

    Tatayo.

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    Quel SGBD ?
    Quelle Version ?
    Quel Provider ?
    Quel Driver ?
    Heureusement que l'on sait cherché nous même pour avoir vos informations : Problème requête SQL

    Donc SGBD -> SQLite
    Quelle Version ?
    Quel Provider ? Zeos, FireDAC ?


    Le DISTINCT ne doit pas réclamer tous les champs mais attention au ORDER BY qui parfois peut entré en conflit, comme parfois aussi avec un GROUP BY

    C'est un DISTINCT pour les doublons d'une seule table ou pour éliminer les cardinalités parasites générés par une jointure ?

    Faudrait d'abord construire la requête sur les outils SQLite et consulter les experts concernées dans Forum > Bases de données > Autres SGBD > SQLite car il faut différencier si c'est une problème DELPHI (lié au Provider et d'un éventuel Parser de SQL) d'un problème de restriction SQL de SQLite voir même un problème sur la table elle-même, peut-être la nécessité d'avoir un Index.

    Comment est déclaré aussi la Query, est-ce créée à la volée ou créée en Design Time avec des champs persistants (à éviter au maximum)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 577
    Billets dans le blog
    65
    Par défaut
    C'est bien SQLite et a priori Firedac (en regardant dans le forum SQLite)
    AMHA, une erreur de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT colonnea,colonneb.... FROM <table>
    fonctionne

    Maintenant, tout dépend de ce qui est voulu

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    SGBD : Sqlite
    Version : 3 et quelques
    provider : Zeos
    Driver : ?????
    Finalement ce n'est pas FireDac mais Zeos, on avait une chance sur deux avec SQLite

    On n'a d'ailleurs pas le message d'erreur ni le nom de l'exception, cela aiderait pourtant aussi à faire le diagnostic
    Est-ce une Notification d'Exception ou une Exception d'ailleurs ?

    Citation Envoyé par f5jcg_Lulu Voir le message
    J'ignore ce que cela veut dire, excusez-moi !
    Je devine donc la méthode des débutants avec Datas.QJournal, une Query dans un DataModule, vérifier vos champs persistants, il ne faut pas utiliser la même Query avec différents SQL si vous avez des champs persistants.

    Les champs persistants sont visibles dans le code par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QJournal: TZQuery
    QJournalNum_operation: TIntegerField;
    QJournalLabel: TStringField;
    Pour moi, il faudrait un QJournal global au SQL fixe et un QJournalDynamic pour les SQL évolutifs ... c'est pour rester simpliste si vous ne maitrisez pas l'instanciation dynamqiue.

    Vous avez le même problème avec QAdherents où vous devez utiliser la même Query pour plusieurs SQL, puisque vous avez ce même problème en 2020.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 577
    Billets dans le blog
    65
    Par défaut
    Zeos j'étais persuadé qu'il s'agissait de Firedac.

    Si la requête est
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Num_operation FROM tblJournal
    et que cela demande les autres champs alors c'est que ces champs ont été déclarés

    Une solution sans supprimer ces déclarations : faire une jointure

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT D.Num_operation,
    j.Label,j.Journee, j.Nom, j.Montant_credit, j.Montant_debit, j.Print, j.Imputation, j.Nomen
     FROM QJournal D LEFT JOIN QJournal J on J.Num_operation=D.num_operation
    Mais je ne pense pas que ce soit le résultat voulu
    Je cherche à éliminer les doublons dans <Num_operation>, rôle typique du DISTINCT.
    pour extraire les doublons ce n'est pas DISTINCT que j'utiliserai je pense plutôt à un GROUP BY HAVING dans quelque chose comme ça
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH D as (SELECT Num_operation FROM QJournal GROUP BY num_operation HAVING  Count(num_operation)>1)
    SELECT D.Num_operation,
    j.Label,j.Journee, j.Nom, j.Montant_credit, j.Montant_debit, j.Print, j.Imputation, j.Nomen
     FROM QJournal D LEFT JOIN QJournal J on J.Num_operation=D.num_operation

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 219
    Par défaut
    SGBD : Sqlite
    Version : 3 et quelques
    provider : Zeos
    Driver : ?????

    La requête devrait être celle-ci :
    SELECT DISTINCT Num_operation FROM tblJournal

    Je cherche à éliminer les doublons dans <Num_operation>, rôle typique du DISTINCT. Mais je dois lister tous les champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    With Datas.QJournal do
      begin
        SQL.Clear;
        SQL.Text := 'SELECT DISTINCT Num_operation, Label, Journee, Nom, Montant_credit, Montant_debit, Print, Imputation, Nomen FROM QJournal'; //éventuellement ORDER BY Num_operation
        Open;;
    end;
    Bien sûr, le résultat me donne tous les enregistrements, doublons compris.

    Comment est déclaré aussi la Query, est-ce créée à la volée ou créée en Design Time avec des champs persistants (à éviter au maximum)
    J'ignore ce que cela veut dire, excusez-moi !

    Merci.

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

Discussions similaires

  1. Concaténation de champs dans SQL Server
    Par helio500 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/04/2011, 15h14
  2. [interbase][SQL] concatener 2 champs dans le select
    Par Harry dans le forum Bases de données
    Réponses: 10
    Dernier message: 09/03/2006, 06h45
  3. Champ de type "Image" dans SQL Server
    Par Edouard Kaiser dans le forum ASP
    Réponses: 5
    Dernier message: 09/09/2005, 07h43
  4. 2 champs dans un where , possible en sql server ?
    Par voyageur dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 19/10/2004, 05h01
  5. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59

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