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ème de code


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 133
    Points : 18
    Points
    18
    Par défaut problème de code
    Bonsoir à tous ,
    j'ai fait le code suivant d'un questionnaire tout fonctionne bien sauf la requête il me donne un message d'erreur que une chose manque (la requête en fait consiste à déterminer la satisfaction des clients par pays )
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Mask, DBCtrls, ExtCtrls, DB, DBTables, Grids, DBGrids;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Panel2: TPanel;
        DBLookupComboBox1: TDBLookupComboBox;
        DBLookupComboBox2: TDBLookupComboBox;
        DBLookupComboBox3: TDBLookupComboBox;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        GroupBox1: TGroupBox;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        GroupBox2: TGroupBox;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
     
        clt: TTable;
        cltsou: TDataSource;
        produit: TTable;
        produitsou: TDataSource;
        Fonction: TTable;
        Fonctionsou: TDataSource;
        DBNavigatorclient: TDBNavigator;
        enquete: TDBGrid;
        enquetesou: TDataSource;
        Tableenquete: TTable;
        TableenqueteCompteur: TAutoIncField;
        TableenqueteCodeclient: TStringField;
        TableenqueteCodeproduit: TStringField;
        TableenqueteNometPrenom: TStringField;
        TableenqueteCodefonction: TStringField;
        TableenqueteservicecommQ1: TStringField;
        TableenqueteservicecommQ2: TStringField;
        TableenqueteservicecommQ3: TStringField;
        TableenquetesatisprodQ1: TStringField;
        TableenquetesatisprodQ2: TStringField;
        TableenquetesatisprodQ3: TStringField;
        TableenquetesatisprodQ4: TStringField;
        TableenquetesatisprodQ5: TStringField;
        TableenquetesatisprodQ6: TStringField;
        TableenquetesatisprodQ7: TStringField;
        TableenquetesatisprodQ8: TStringField;
        DBMemo1: TDBMemo;
        Label29: TLabel;
        Button1: TButton;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Query1: TQuery;
        procedure Button1Click(Sender: TObject);
        procedure npChange(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    var requete:string;
    i:integer;
    begin
     requete:='SELECT pays  From"C:\dossier\clt.db"UNION"C:\dossier\Enquête.db" WHERE (for i in 1..3 LOOP servicecommQi=="Totalement d'accord" GROUP BY "pays") ';
    Query1.SQL.clear;
    Query1.SQL.add (requete);
    Query1.Open;
     
    end;
     
    end.
    je souhaite aussi déterminer la satisfaction par service et par produit mais je ne sais pas comment ? [les réponses pour servicecommQ1 sont:Totalement d'accord ,plutôt en accord ,suffisant, insuffisant]
    se sont en fait les réponses pour toutes les questions existantes dans la requête

    merci beaucoup d'avance pour toute réponse

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 196
    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 196
    Points : 41 425
    Points
    41 425
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    quel SGBD ? cela ressemble a des tables paradox ?

    il faudrait peut être un peu (beaucoup) réviser ton SQL

    a) pour une UNION il faut ensuite indiquer la relation (ON)
    b) quant à
    (la requête en fait consiste à déterminer la satisfaction des clients par pays )
    cela ressemble a une clause GROUP BY

    il aurait mieux valu nous fournir la description des tables (avec leurs relations)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 133
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    quel SGBD ? cela ressemble a des tables paradox ?

    il faudrait peut être un peu (beaucoup) réviser ton SQL

    a) pour une UNION il faut ensuite indiquer la relation (ON)
    b) quant à
    cela ressemble a une clause GROUP BY

    il aurait mieux valu nous fournir la description des tables (avec leurs relations)
    oui désolé vous avez bien raison j'ai oublié GROUP BY "pays"

    j'ai édité le codeci-dessus mais comme même il me donne aussi un message d'erreur
    j'ai pas compris comme est ce que je dois utiliser le ON
    oui ils s'agissent de tables paradox
    les structures de tables sont les suivantes :
    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
     
    la table client 
    Compteur de type + clès primaire 
    Gouvernorat de type A de taille 50 
    et Fonction de type A et de taille 20
     
    la table enquête :
    compteur clès primaire de type +
    code client de type A 50 clès secondaire 
    code produit   A 50 clès secondaire 
    Nom et prénom de type A de taille 50 
    servicecommQ1 A 100
    servicecommQ2 A 100
    serviceCommQ3 A 100
    SatisprodQ1   A 100
    SatisprodQ2  A 100
    SatisprodQ3   A 100
    SatisprodQ4   A 100
    SatisprodQ5   A 100
    SatisprodQ6   A 100
    SatisprodQ7   A 100
    SatisprodQ8   A 100
    merci beaucoup d'avance pour toute réponse

  4. #4
    Membre averti Avatar de Moez.B
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Mars 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 219
    Points : 370
    Points
    370
    Par défaut
    Salut
    La requête n'est pas du tout claire, tu veux avoir comme résultat la satisfaction des clients par pays, on commence par vérifier la requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT pays  
    From"C:\dossier\clt.db"UNION"C:\dossier\Enquête.db" 
    WHERE (for i in 1..3 LOOP servicecommQi=="Totalement d'accord" GROUP BY "pays"
    en faite, la syntaxe de la requête doit changer un peu :
    La colonne Pays ne figure pas dans la table Enquête
    Pour avoir une satisfaction groupé par Pays , il faut avoir le cumul des satisfactions pour les services servicecommQi pour chaque pays ... pense à un opérateur or dans ta requête ...
    voilà je t'éclaircie un peu ce qu'il faut faire mais il faut un peu d'effort ...
    Bonne journée

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    FOR IN LOOP c'est du PL\SQL ?
    Cela ne fonctionnera pas avec Paradox !

    Il faut arreter d'utiliser Paradox et BDE lorsque l'on fait une nouvelle application en 2013 !
    FireBird ou MySQL avec DBExpress* me semble un meilleur choix
    * ou IUB ou Zeos ...

  6. #6
    Membre averti Avatar de Moez.B
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Mars 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 219
    Points : 370
    Points
    370
    Par défaut
    @ShaiLeTroll :
    Oui évidement, j'ai arrêté d'utiliser BDE dans ma boîte l'année dernière en utilisant la fameuse AnyDac ... Est ce qu'il y a un un sujet dans le forum qui démontre les faiblesses de la BDE et pourquoi elle est devenue obsolète ? moi, à part mes remarques pour les BLOB et l'instabilité face à ce types de données, je n'ai pas eu de mal à travailler avec ?
    Une autre question, pourquoi BDE figure encore dans DELPHI XE2 (est ce que c'est juste pour la survie des anciennes applications utilisant encore la BDE) ....

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 662
    Points : 25 447
    Points
    25 447
    Par défaut
    En fait, je m'adressais à le sportif, il est étudiant, Paradox est pratique au début mais ne donne pas de bonnes habitudes !

    Pour ma part, j'ai eu dès l'an 2000, les conseils de mon maitre d'apprentissage qui me disait que BDE avec partage de fichier windows 98, au bout de 7 user, cela délirait !
    D'ailleurs, la conversion IB6 était en marche dans cette société

    Semble que des experts utilisant le BDE avec Samba grandement améliorent cela ! Donc pas un problème du BDE mais du FS !

    J'ai eu pour ma part des soucis, une EDBEngineError qui survenait au bout de 10 000 000 d'opérations dans un bot que j'avais fait, disons qu'il ne lui fallait que 24 à 72h pour que cela se produise et cela sur fichier strictement local mais accédé par plusieurs thread (chacun avec leur propre TDatabase et leurs propres TQuery)
    Vu que je maintiens des programmes qui tournent plus de 100 jours sans reboot, tu comprends que cela me pose problème, MySQL (EasyPHP 1.8) cela lui posait aucun soucis, semble que SQL Anywhere soit aussi robuste

    Il faut aussi séparer BDE et Paradox
    Paradox est limité en SQL, ce n'est pas un cadeau de commencer avec si l'on a appris du PL\SQL !
    le BDE pouvant utiliser SQL Server ou Oracle en ODBC, j'ai même eu de meilleur perf BDE+IB que IBX+IB à cause de subtilité du Prepared

    Moi aussi, quand j'ai bossé sur Paradox, cela ne me posait pas de problème !
    Mais je m'y suis habitué au SQL finalement et au SGBD qui vont avec

    BDE est devenue obsolète parce qu'il fallait vendre DBExpress
    Il est un peu plus pénible de l'installer au fur et à mesure des versions de Windows (un peu comme bcp de truc d'ailleurs)

    le BDE devenue obsolète parce que l'on peut pas tout maintenir non plus, entre ADO et DBX puis FireDAC, ça en fait bcp !

    pourquoi BDE figure encore dans DELPHI XE2
    Il faut bien migrer, il est bien plus facile de migrer le BDE vers FireDAC si tu peux utiliser les deux en parallèle, pouvoir débogueur la version BDE et la version FireDAC le temps de la migration.

    Il y a encore beaucoup d'utilisateur du BDE, comme c'est un élément historique de Delphi, cela va surement rester pour de longues années, déjà que lorsque cela change d'outil de reporting, c'est la crise, alors supprime le BDE serait l'apocalypse !

  8. #8
    Membre averti Avatar de Moez.B
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Mars 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 219
    Points : 370
    Points
    370
    Par défaut
    @ShaiLeTroll : Merci pour toutes ces infos,

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 133
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Moez.B Voir le message
    Salut
    La requête n'est pas du tout claire, tu veux avoir comme résultat la satisfaction des clients par pays, on commence par vérifier la requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT pays  
    From"C:\dossier\clt.db"UNION"C:\dossier\Enquête.db" 
    WHERE (for i in 1..3 LOOP servicecommQi=="Totalement d'accord" GROUP BY "pays"
    en faite, la syntaxe de la requête doit changer un peu :
    La colonne Pays ne figure pas dans la table Enquête
    Pour avoir une satisfaction groupé par Pays , il faut avoir le cumul des satisfactions pour les services servicecommQi pour chaque pays ... pense à un opérateur or dans ta requête ...
    voilà je t'éclaircie un peu ce qu'il faut faire mais il faut un peu d'effort ...
    Bonne journée
    bonsoir
    donc je dois utiliser count mais le problème que j'ai 3 servicecomm
    et 8 pour satisproduit comment est ce que je vais faire ; j'ai fait beaucoup d'effort mais j'ai rien trouvé
    j'ai comme table produit de champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Libelle A 20
    Reference  A10
    j'ai essayé aussi la syntaxe suivante pour déterminer le produit le plus satisfaisant j'ai écrit le CODE suivant mais le programme me donne la table requête toute entière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Requete:string;
    begin
    Requete:='select Libelle from "C:\dossier\produit.db" GROUP BY Reference HAVING COUNT(Reference)=(select MAX(COUNT Code produit) from "C:\dossier\Enquête.db" GROUP BY(Code produit))';
    Query1.sql.clear;
    Query1.sql.add(Requete);
    Query1.ExecSQL;
    Query1.Open;
    end;
    malgrè que j'ai bien lié les composantes en effet pour
    dans les inspecteurs d'objets

    le composant datasource j'ai écrit : enquete qui est le nom de la ttable enquête
    et dans le name datasourceenq que je l'ai mis aussi pour le query et le dbgrid dans le champ datasource
    Merci d'avance pour toute réponse

Discussions similaires

  1. problème de code avec un tableau
    Par richard038 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/05/2006, 17h35
  2. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 22h50
  3. [POO] Problème de code PHP avec Internet Explorer
    Par bzoler dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 11h00
  4. Problème de code besoin d un petit depannage
    Par rakengoule dans le forum MFC
    Réponses: 3
    Dernier message: 10/10/2005, 16h25
  5. Probléme de code non portable
    Par Stany dans le forum Windows
    Réponses: 2
    Dernier message: 23/08/2005, 11h02

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