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 :

Probleme sur requete (not in)


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Probleme sur requete (not in)
    Bonjour à tous,

    Je n'arrive pas à faire ma requete apres pas mal de différentes méthodes.

    voici le bout de code

    // Ici on recherche les composants à exclure
    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
              
          For n := StringGridSemaine.ComponentCount-1 downto 0 do // Le faire Absolument à l'envers
              Begin
                if StringGridSemaine.Components[n] is TShape then
                Begin
                  if StringGridSemaine.Components[n].Tag <> -1000 then
                  Begin
                    if LeftStr(StringGridSemaine.Components[n].Name,1) = 'P' then
                    TachesRefName := TachesRefName + Droite('PANEL',StringGridSemaine.Components[n].Name)+ ',';
    
                    if LeftStr(StringGridSemaine.Components[n].Name,1) = 'X' then
                    TachesRefNameX := TachesRefNameX + QuotedStr(Droite('X',StringGridSemaine.Components[n].Name))+ ',';
                  end;
                end;
              end;
    // On retire la dernière virgule en bout de chaine
              TachesRefName := StrCoupeADroite(TachesRefName,1);
              TachesRefNameX := StrCoupeADroite(TachesRefNameX,1);
    
    //          showmessage(TachesRefName + #13+#10 + TachesRefNameX);
    
              If TachesRefName <> '' then // Cas où le planning n'est pas vide dans cette semaine
              Begin
    
                Sql.Clear;
                Sql.Add('Select * From Calendrier ');
                Sql.Add('Where DateDebut>= :xDebut AND DateDebut<= :xFin ' );
                Sql.Add('And NumEdit not in ('+TachesRefName+') ');
                Sql.Add('And Name not in (:xName)');
                Parameters.ParamByName('xDebut').Value := FormatDateTime('dd/mm/yyyy',DateDebut);
                Parameters.ParamByName('xFin').Value := FormatDateTime('dd/mm/yyyy',DateFin);
                Parameters.ParamByName('xName').Value := TachesRefNameX;
    L'erreur se situe en rouge sur le code.

    J'ai essayé sans passer par Parameters avec ou sans QuotedStr avec ou sans ajout d'un guillemet, rien y fait.

    L'objectif :
    Name est te type String dans ma base
    TacheRefNameX est de type String
    exemple de valeur de TacheRefNameX
    'PANEL10086','PANEL10085'
    mais la recherche dans la base se fait sur tous ces carateres au lieu de respecter 'PANEL10086' à exclure et 'PANEL10085' à exclure, en fait la requete tente d'exclure la valeur 'PANEL100086','PANEL100085'

    Comment concatener correctement, pour qu'il integre chaque valeur séparer par une virgule. normalement je le fait avec des guillemets en access met là meme avec des guillements rien n'y fait.

    quand pensez-vous

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Salut

    ça faisait longtemps

    j'aurais personnellement écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Sql.Add('WHERE DateDebut BETWEEN :xDebut AND :xFin ' );
     ....
     Sql.Add('AND NOT Name IN (:xName)');
    c'est peut-être une affaire de gout
    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
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut serge.

    Effectivement cela faisait un bail !!

    Alors le cout du BETWEEN il est pas respecter, ADO doit délirer...

    et le AND NOT n'existe pas sous access !!

  4. #4
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Si tu avais dit du départ que tu étais en ADO / ACCESS ça aurait aidé !
    Pour moi le NOT IN est correct bien que je ne l'ai utilisé que sur des integers
    Par contre ton format de date ne me semble pas compatible avec Access (le format est plutot #mm/DD/YYYY#).
    Le plus simple ne serait il pas que tu fasses tes essais en SQL avec Access et que tu nous fournisses la requête qui ne fonctionne pas ?

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut philnext.

    La requete sous access ne me pose aucun probleme.
    C'est la transformation sous ado-delphi qui me gene.

    Sous access cela donnerai :
    SELECT * FROM Calendrier
    WHERE Calendrier.DateDebut Between #1/1/2009# And #1/06/2009# AND Calendrier.NumEdit Not In (267,300) AND Calendrier.Name Not In ("PANEL10010","PANEL10020");

    PS : je suis d'accord avec toi sous le format des dates.

  6. #6
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Ben la solution est simple !
    Tu fais ton code qui génère ta requête (sans utiliser les parameters : c'est plus simple) et tu mets un point d'arret juste après sa construction : comme ça tu vois quelle est l'eereur de syntaxe puisque tu connais la syntaxe SQL !!

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par philnext Voir le message
    Ben la solution est simple !
    Tu fais ton code qui génère ta requête (sans utiliser les parameters : c'est plus simple) et tu mets un point d'arret juste après sa construction : comme ça tu vois quelle est l'eereur de syntaxe puisque tu connais la syntaxe SQL !!
    ????
    La syntaxe SQL ne me pause quaziement aucun probleme...
    j'ai indiquer en dessous la ou se situait le probleme.
    Lorsque je recolte les composants de ma forms dans la variable
    TachesRefNameX l'utilisation par parameters n'ai pas correct.
    imaginon que j'ai dans ma variable TachesRafNameX
    'Panel10010','Panel10020' la requete n'ai pas traquit correctement si tu veux access comprends cela

    SELECT * FROM Calendrier
    WHERE Calendrier.DateDebut Between #1/1/2009# And #1/06/2009# AND Calendrier.NumEdit Not In (267,300) AND Calendrier.Name Not In ("PANEL10010,PANEL10020");

    au lieu de cela
    SELECT * FROM Calendrier
    WHERE Calendrier.DateDebut Between #1/1/2009# And #1/06/2009# AND Calendrier.NumEdit Not In (267,300) AND Calendrier.Name Not In ("PANEL10010","PANEL10020");

    Donc :=Names est égale à une valeur et pas à un ensemble de valeur.

  8. #8
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    C'est bon j'ai trouver mon probleme entre temps.

  9. #9
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Ben oui : tu avais oublié les " !!

  10. #10
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par philnext Voir le message
    Ben oui : tu avais oublié les " !!
    Non quand même pas !!

    j'ai fais cela
    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
              
          For n := StringGridSemaine.ComponentCount-1 downto 0 do // Le faire Absolument à l'envers
              Begin
    // ...
    
                    if LeftStr(StringGridSemaine.Components[n].Name,1) = 'X' then
                    TachesRefNameX := TachesRefNameX + QuotedStr(Droite('X',StringGridSemaine.Components[n].Name))+ ',';
    
    // ....
    
              end;
    // ...
              TachesRefNameX := StrCoupeADroite(TachesRefNameX,1);
    //....
              If TachesRefName <> '' then // Cas où le planning n'est pas vide dans cette semaine
              Begin
    // ...
    
                Sql.Clear;
                Sql.Add('Select * From Calendrier ');
                Sql.Add('Where DateDebut Between :xDebut AND :xFin ' );
                Sql.Add('And NumEdit Not in ('+TachesRefName+') ');
                Sql.Add('And Name Not in ('+TachesRefNameX+') ');
                Parameters.ParamByName('xDebut').Value := FormatDateTime('dd/mm/yyyy',DateDebut);
                Parameters.ParamByName('xFin').Value := FormatDateTime('dd/mm/yyyy',DateFin);
    J'ai retiré la ligne Parameters.

    PS : La date bizarement si je mets mm/dd/yyyy c'est la fête à neuneu...

  11. #11
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    OK perso. je n'utilise pas les parameters je trouve que ça 'obscurci' le traitement...

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

Discussions similaires

  1. [SQL] Probleme sur requete
    Par Invité(e) dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2007, 17h30
  2. probleme sur requete d'analyse croisée
    Par sebastien97 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/06/2007, 15h22
  3. Probleme sur requete de mise à jour
    Par kikilevrai dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/01/2007, 11h54
  4. probleme sur requete
    Par pimpmyride dans le forum Access
    Réponses: 13
    Dernier message: 03/05/2006, 09h44
  5. [MySQL] Probleme sur requetes imbriquées
    Par joxbl dans le forum Langage SQL
    Réponses: 41
    Dernier message: 12/04/2006, 17h20

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