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 :

Requête Paradox avec mot réservé


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut Requête Paradox avec mot réservé
    Bonjour à tous,

    Ca fait un petit moment que je tourne en rond et du coup je m'en remet à vous

    J'ai une table paradox qui n'est pas de moi et dont je ne peux pas modifier les champs. Un de ces champs est nommé "Date" qui est un mot réservé.

    J'essaye désespérément via un TQuery de lancer une simple requête mais rien n'y fait.

    Voici un petit bout de code pour me faire mieux comprendre;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    with QueryWkw do
    begin
        SQL.Clear;
        SQL.Add('SELECT SUM(TOTAL_TTC) as TOTAL FROM "C:\TICKET_ENTETE.DB" WHERE TICKET_ENTETE."DATE" > "05/05/2011" ');
        Active := True;
    end;
    J'ai essayé d'entourer Date avec ` ou [ mais ça ne bouge pas plus.

    Quelqu'un aurait il une solution parce que je ne sais plus où regarder

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 812
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 812
    Points : 13 527
    Points
    13 527
    Par défaut
    Les guillemets sur le champ sont corrects. Par contre, la valeur de test doit être entre appostrophes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SQL.Add('SELECT SUM(TOTAL_TTC) as TOTAL FROM "C:\TICKET_ENTETE.DB" WHERE "DATE" > ''05/05/2011''');

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Je confirme ça marche mieux comme ça.

    Un grand merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    J'ai peut être crié victoire trop vite.

    La requête ne me génère plus d'erreur mais ignore complètement la condition sur la date. En gros elle ne tient pas compte de "DATE" > ''05/05/2011''

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Citation Envoyé par Arsiezis Voir le message
    J'ai peut être crié victoire trop vite.
    La requête ne me génère plus d'erreur mais ignore complètement la condition sur la date. En gros elle ne tient pas compte de "DATE" > ''05/05/2011''
    AMHA, un problème de conversion de la chaine en date.
    Si j'étais à ta place et pour éviter cela et une possible injection SQL, je passerais par une requête paramétrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL.Add('SELECT SUM(TOTAL_TTC) as TOTAL FROM "C:\TICKET_ENTETE.DB" WHERE "DATE" > :ParamDate');
    //...
    Query1.Params.ParamByName('ParamDate').AsDate := MaVarDate;
    --
    Philippe.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    J'avais essayé de faire joujou avec les paramètres mais sans succès.

    Apparement mon champ Date est maintenant géré comme un string et si j'utilise ce que tu viens de proposer je finis avec le message d'erreur suivant;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le projet prj_xxx.exe a déclenché la classe d'exception EDBEngineError avec le message 'Type mismatch in expression.'.

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Quel est le format de ta colonne DATE dans ta table ?

    Si c'est VARCHAR ou CHAR, tu as un problème car '05/05/2011' > '01/06/2011'
    sauf à enregistrer les dates au format 'AAAA/MM/JJ'...

    Après suivant le SGBD, ce peut être DATE, TIME, TIMESTAMP et le paramètre doit être typée en conséquence...
    --
    Philippe.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Mon soucis vient surtout que je ne peux pas modifier cette table, sinon la solution de renommer la colonne aurait règlé ça rapidement.

    Le format de ma colonne DATE est bien "Date", mais avec la solution fournie par Andnotor ça ne se conduit plus comme un champ "Date" au niveau de la requête (apparement). Ca arrête de faire raler le compilateur mais ça me sort n'importe quoi en terme de résultat.

    Avec un interpreteur externe (ezexplorer), je peux arriver à ce que je veux en faisant un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TICKET_ENTETE WHERE TICKET_ENTETE."DATE" > "05/05/2011"

  9. #9
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Citation Envoyé par Arsiezis Voir le message
    Mon soucis vient surtout que je ne peux pas modifier cette table, sinon la solution de renommer la colonne aurait règlé ça rapidement.
    Rassures toi, ce n'est pas la solution que j'envisageais...
    Autre question : Quel est le SGBD ? quelle est la classe du Query ?
    Citation Envoyé par Arsiezis Voir le message
    Le format de ma colonne DATE est bien "Date", mais avec la solution fournie par Andnotor ça ne se conduit plus comme un champ "Date" au niveau de la requête (apparement). Ca arrête de faire raler le compilateur mais ça me sort n'importe quoi en terme de résultat.
    Conversion de format incorrect de la chaine, AMHA...
    Citation Envoyé par Arsiezis Voir le message
    Avec un interpreteur externe (ezexplorer), je peux arriver à ce que je veux en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TICKET_ENTETE WHERE TICKET_ENTETE."DATE" > "05/05/2011"
    L'interpréteur lui doit convertir correctement ce que tu lui donnes. Quel est l'outil ?
    --
    Philippe.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Pour le Query il s'agit d'un simple TQuery et le SGBD : paradox.

    L'outil est EzExplorer. J'ai aussi fait l'essai avec Access, qui m'effectue correctement la requête.

    Comme interprétation SQL il me propose;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TICKET_ENTETE WHERE (((TICKET_ENTETE.DATE)>#5/5/2011#));
    J'avoue être un peu perdu

  11. #11
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Tu dois faire autre chose qui ne va pas...
    Le code suivant fonctionne avec une table Paradox PERSONNE de structure (telle que donnée par l'outil "Module Base de données" de Delphi)
    NOM A 30
    PRENOM A 30
    DATE_NAISSANCE D

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      if Query1.Active then
        Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('SELECT NOM, PRENOM, DATE_NAISSANCE FROM APPOINTS WHERE DATE_NAISSANCE > :PDate');
      Query1.ParamByName('PDate').AsDate := DateTimePicker1.Date;
      // Query1.ParamByName('PDate').AsDate := StrToDate('15/07/1966');
      // Ceci fonctionne aussi
      Query1.Open;
    --
    Philippe.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Non mais oui

    Les requêtes paramétrées fonctionnent si j'utilise d'autre champ dans la clause where. Elles fonctionnent même si j'utilise un autre champ date qui n'est pas nommé "DATE".

    Pour mieux me faire comprendre, à l'adresse suivante se trouve la table qui me pose problème:

    Table.rar

    Encore merci pour ton aide

  13. #13
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Je n'ai pas très bien compris ta dernière phrase, mais j'ai repris ta table.
    J'ai réalisé un petit exemple avec requête variable en critère de filtre et donc de paramètres. Mon exemple fonctionne correctement ou alors, je n'ai vraiment pas les yeux en face des trous !

    Voir le lien de téléchargement...
    --
    Philippe.
    Fichiers attachés Fichiers attachés

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Ca marche... et je viens de voir d'où ça vient...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1.SQL.Add(' FROM TICKET_ENTETE T');
    Tu fais un lien entre TICKET_ENTETE et T et tu le réutilises plus loin dans ta clause where ce que je ne faisais pas.

    Bref j'aurai appris un truc, et tu vas me permettre d'avancer.

    Un grand merci à toi

  15. #15
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Citation Envoyé par Arsiezis Voir le message
    Tu fais un lien entre TICKET_ENTETE et T et tu le réutilises plus loin dans ta clause where ce que je ne faisais pas.
    C'est un alias de table pour être exact.
    Préfixer une colonne avec cet alias permet de l'identifier sans ambiguïté, en particulier quand le nom de colonne est un mot réservé ou quand on réalise une auto jointure. Par exemple, je veux les salariés et leur responsable direct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT P1.NOM AS SALARIE, P2.NOM AS RESPONSABLE
    FROM PERSONNE P1
    LEFT JOIN PERSONNE P2
    ON P1.RESP_ID = P2.ID
    J'utilise également dans ce cas des alias de colonnes. Le mot réservé AS aurait également pu être utilisé pour l'alias de table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT P1.NOM AS SALARIE, P2.NOM AS RESPONSABLE
    FROM PERSONNE AS P1
    LEFT JOIN PERSONNE AS P2
    ON P1.RESP_ID = P2.ID
    --
    Philippe.

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

Discussions similaires

  1. Pb avec mot réservé
    Par Syrrus dans le forum Paradox
    Réponses: 2
    Dernier message: 14/05/2009, 13h36
  2. Requète avec mot clé venant d'un champ de form
    Par Dongosaure dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 09/10/2007, 12h33
  3. Requête de recherche avec mot clé
    Par timhost dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/09/2007, 09h19
  4. [TQuery] Créer une table Paradox avec mots de passe
    Par bsdocuments dans le forum Bases de données
    Réponses: 4
    Dernier message: 06/03/2007, 15h46
  5. requêtes Multi Base avec Mot de Passe
    Par bohor2gannes dans le forum Access
    Réponses: 4
    Dernier message: 27/02/2006, 14h45

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