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 :

Intégration de requête SQL


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Points : 71
    Points
    71
    Par défaut Intégration de requête SQL
    Bonjour,
    j'ai besoin pour utiliser une donnée de créer une requête et de l'intégrer dans le code en delphi, mon problème est que je ne peux pas créer de champs supplémentaire dans ma base pour stocker le résultat, donc je créer un alias cependant j'ai un message d'erreur lorsque je lance l'exe et que j'utilise l'interface ou la requete est utilisée, le champ est introuvable!!!!

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Quelle DB ? Paradox, FireBird, MySQL, SQL Serveur, Oracle ?
    Quelle Lib ? BDE, DBExpress, ADO, CoreLab ?

    As-tu fais un Open ? ou ExecSQL ou Execute ?
    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

  3. #3
    Membre régulier Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Points : 71
    Points
    71
    Par défaut
    la DB c'est Fire bird voici ma requette :

    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
     
    ModuleTactille.NewQry(Qry);
      with qry do
      begin
      if Active=true then close;
        SQL.Clear;
        SQL.add(' select count(DISTINCT PARAMETRES.PAR_CODPAR ) as totalserve from PARAMETRES where PARAMETRES.PAR_CODTBL=''SERVE''');
     
         _nbtotserv:=FieldByName('totalserve').AsInteger;
     
         Active:=true;
        Open;
        while not Eof do
        begin
        if (_nbserv > _nbtotserv) then
         MessageDlg('Ce numéro de serveur n''est pas attribué , recommencer.', mtWarning, [mbOK], 0);
         DMTactile.DestroyQRY(Qry);
         end;
          Next;
      end;
    le message d'erreur est :Champ 'totalserve' non trouvé.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Oula !! Il y a quelques petites erreurs dans ce code.

    Teste ceci, pour voir:

    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
     
      ModuleTactille.NewQry(Qry);
      with qry do
      begin
        if Active then
          Close;
        SQL.Clear;
        SQL.Add('select count(DISTINCT PARAMETRES.PAR_CODPAR) as TOTALSERVE');
        SQL.Add('from PARAMETRES');
        SQL.Add('where PARAMETRES.PAR_CODTBL=''SERVE''');
        Open;
        _nbtotserv := FieldByName('TOTALSERVE').AsInteger;
     
        if (_nbserv > _nbtotserv) then
          MessageDlg('Ce numéro de serveur n''est pas attribué , recommencer.',
            mtWarning, [mbOK], 0);
        Close;
      end;
      DMTactile.DestroyQRY(Qry);
    @+ Claudius

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Oula !! Il y a quelques petites erreurs dans ce code.
    y a surtout une grosse erreur dans la requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     SQL.Add('select DISTINCT count(PAR_CODPAR) as TOTALSERVE');
     SQL.Add('from PARAMETRES');
     SQL.Add('where PAR_CODTBL=''SERVE''');
    Normalement la, la requete est correcte (J'ai nettoyé ce qui n'était pas nécessaire aussi).
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Add('select count(DISTINCT PAR_CODPAR) as TOTALSERVE');
    Cette ligne est correcte sous Firebird. ce qui ne donne pas exactement le même résultat.

    @+

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Add('select count(DISTINCT PAR_CODPAR) as TOTALSERVE');
    Cette ligne est correcte sous Firebird. ce qui ne donne pas exactement le même résultat.

    @+
    Effectivement, cela compte les différentes valeurs et non pas le nombre d'occurence globale ! Fonctionne sous MySQL ainsi qu'Oracle ...

    Maintenant, Count étant souvient lié à un aggrégat via Group By, le distinct n'a que peu d'utilité dans l'exemple que tu as cité Rayek, ... et affirmer qu'il y avait une erreur dans la requête, en était une bien plus grosse ...

    Ces deux lignes ont un résultat similaire, mais c'est un cas spécifique, en dehors de cela Group By et Distinct n'ont pas le même intérêt (cela permet d'éviter de passer par des tables temporaires explicites, ce que fait le SGBD en interne)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT distinct nom, prenom FROM individu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom, prenom FROM individu group by nom, prenom
    Sinon, c'est tout simplement, le Open qui était fait après l'utilisation du champ, grand classique ... cela pouvait se résoudre par quelques secondes de recul vis-à-vis de son travail ... et la touche F1 !
    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

  8. #8
    Membre régulier Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Points : 71
    Points
    71
    Par défaut
    En tout cas merci a vous tous , vos explications ont fait progressé mon appli , je n'ai pas le résultat escompté pour l'instant ; mais je compile sans erreur et je suis sur une bonne piste , et maintenant je sais intégrer une requete sous Delphi.

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Sinon le "DMTactile.DestroyQRY(Qry);" est mal placé, le with risque de ne pas aimer ...
    Le Next est en dehors de la boucle, avec le Count, cela n'a pas grande importance, voici ce que je propose comme code, juste question de Syntaxe


    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
      ModuleTactille.NewQry(Qry);
      with qry do
      try
        if Active then // Un boolean n'a pas besoin d'être testé à true, il est déjà à true ou à false !
          Close();
     
        SQL.Clear;
        SQL.add(' select count(DISTINCT PARAMETRES.PAR_CODPAR ) as totalserve from PARAMETRES where PARAMETRES.PAR_CODTBL=''SERVE''');
        Open; // Le Active est mis à True par le Open
        if not IsEmpty then // Pas de raison que cela échoue
        begin
          _nbtotserv:=FieldByName('totalserve').AsInteger;
          if (_nbserv > _nbtotserv) then
            MessageDlg('Ce numéro de serveur n''est pas attribué , recommencer.', mtWarning, [mbOK], 0);
        end;
      finally
        DMTactile.DestroyQRY(Qry);
      end;
    Sinon pour le SQL ... je te dirais d'essayer ceci pour voir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select count(PARAMETRES.PAR_CODPAR ) as totalserve from PARAMETRES where PARAMETRES.PAR_CODTBL=''SERVE''
    group by PARAMETRES.PAR_CODPAR
    ce qui s'utiliserais comme ceci ...

    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
      ModuleTactille.NewQry(Qry);
      with qry do
      try
        if Active then // Un boolean n'a pas besoin d'être testé à true, il est déjà à true ou à false !
          Close();
     
        SQL.Clear;
        SQL.add(' select count(PARAMETRES.PAR_CODPAR ) as totalserve from PARAMETRES where PARAMETRES.PAR_CODTBL=''SERVE'' group by PARAMETRES.PAR_CODPAR');
        Open; // Le Active est mis à True par le Open
        while not EOF do
        begin
          _nbtotserv := FieldByName('totalserve').AsInteger;
          if (_nbserv > _nbtotserv) then
          begin
            MessageDlg('Ce numéro de serveur n''est pas attribué , recommencer.', mtWarning, [mbOK], 0);
            Exit;
          end;
     
          Next();
        end;
      finally
        DMTactile.DestroyQRY(Qry);
      end;
    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

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Sous Access cela ne fonctionne pas, c'est pour cela ^^

    Enfin bon, pour ma part je n'utilise que du SQL 92 pur, ça évite beaucoup de problème (surtout si on change de base de données)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Sous Access cela ne fonctionne pas, c'est pour cela ^^
    lol, c'est plutôt ce qui fonctionne sous Access qu'il faut trouver
    Citation Envoyé par Rayek Voir le message
    Enfin bon, pour ma part je n'utilise que du SQL 92 pur, ça évite beaucoup de problème (surtout si on change de base de données)
    Tu n'as pas tord, j'ai participé à de nombreux projets multi-DB (Oracle, SQL Server et IB\FB), eh bien, dans tous, il y avait soit un parser pour traduire les opérations ou alors un switch permettant d'écrire une requête commune à tous formats ou spécifiques si nécessaire ... et les Dates sont souvent les grosses chieuses ...
    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

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/02/2012, 14h16
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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