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 :

Champ date contenant un espace


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut Champ date contenant un espace
    Salut a tous
    jai un probleme avec cette requette
    je pense que le probleme dans le champ qui contient l'espace
    Voila le code source:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    query1.active:= false;
    Query1.SQL.clear;
    Query1.SQL.add(' select * from table1 WHERE table1."Fin De Formation" like :P1  ');
    query1.Params.parambyname('P1').AsDate :=DateTimePicker1.Date ;
    query1.active:=true;

  2. #2
    Rédacteur/Modérateur

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

    AMHA le problème est plutôt dans le LIKE , vous n'avez pas indiqué votre SGBD mais je ne pense pas qu'un seul SGBDR accepte de compraison de ce type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    query1.active:= false;
    // avec SQL.Text, pas besoin de clear 
    Query1.SQL.Text:=' select * from table1 WHERE "Fin De Formation" = :P1 ';
    query1.Params.parambyname('P1').AsDate :=DateTimePicker1.Date ;
    query1.active:=true;
    maintenant si votre type de donnée n'est pas une date mais un DateTimeStamp il faudra peut être utiliser un BETWEEN :date00 AND :date23
    ou tester sur une extraction de date (ceci dépendant encore du SGBD et du type de données)
    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 du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    alors la date ne fonctionne jamais avec la fonction "Like"

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ABBAN270 Voir le message
    alors la date ne fonctionne jamais avec la fonction "Like"
    C'est une affirmation, une question ou encore autre chose ?

    Moi je dis seulement que selon le SGBD (non indiqué) et le Type de champ (non indiqué mais déduit selon le code .asDate) cette clause n'est pas acceptable dans ce SQL.

    Mais rien ne vous empêche de changer le SQL par exemple ainsi
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table1 WHERE CAST("Fin De Formation" AS VARCHAR(20)) LIKE :D
    avec D='%2016%'
    mais encore une fois le SGBD sera primordial car le CAST d'une Date n'aura pas toujours le même format selon ce dernier, il n'est donc pas recommandé de faire ce genre de chose. Pour sélectionner une partie de date il vaut mieux utiliser EXTRACT qui est plus "normalisée"
    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

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Merci Senior
    pour eviter tous les problemes
    jai utiliser la fonction "BETWEEN":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    query1.active:= false;
    Query1.SQL.add(' select * from table1 WHERE table1."Fin De Formation" BETWEEN :P1 AND :P2  ');
    query1.Params.parambyname('P1').Value := DateTimePicker1.Date ;
    query1.Params.parambyname('P2').Value := DateTimePicker1.Date ;
    query1.active:=true;
    sa marche tres bien comme ca.

    mais quand jai remplacer table1."Fin De Formation" par "Fin De Formation" comme vous m'avez dit elle ne veut pas fonctionner
    Voila le message d'erreur:
    Type mismatch in expression

    mais ya autre probleme aussi dans ce Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    query1.active:= false;
    Query1.SQL.add(' select * from table1,table2 WHERE table1.Numero=table2.Numero and "Nombre De Fois" > :P1 ');
    query1.Params.parambyname('P1').Value :=Edit1.text ;
    query1.active:=true;
    Le type de chapm "Nombre De Fois" est "Integer" et j'utilise Paradox7
    il me dit que: "Query1 Parameter P1 Not Found"
    Merci davance

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Attention, j'ai bien indiqué qu'il ne fallait pas utiliser Query1.Clear uniquement si le SQL était injecté via l'instruction Query1.SQL.Text:='........';
    or là si vous utilisez la même query le SQL a des chances d'être faux

    pour ce qui est du deuxième SQL, même s'il s'agit de Paradox utilisez la normalisation pour les jointures ce sera plus lisible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select table1.*,table2.* from table1 JOIN table2 ON table1.Numero=table2.Numero 
    and Table2."Nombre De Fois" > :P1
    évitez également les SELECT *, indiquez plutôt les colonnes que vous voulez rapatrier
    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

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Merci pour les conseils
    jai appliquer le code
    mais toujour le meme message d'erreur !!!!

  8. #8
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    jai essayer plusieurs paramettre mais toujour le meme message:

    Query1 Parameter P1 Not Found

    Adie moi S.V.P

  9. #9
    Rédacteur/Modérateur

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

    pas bien de faire un Up inutile

    Le type de chapm "Nombre De Fois" est "Integer"
    alors pourquoi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query1.Params.parambyname('P1').Value :=Edit1.text ;
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query1.Params.parambyname('P1').asInteger :=StrToIntDef(Edit1.text, 0) ;
    Ensuite avez vous vraiment fait le changement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    query1.active:= false;
    Query1.SQL.Text:='select * from table1,table2 WHERE table1.Numero=table2.Numero and "Nombre De Fois" > :P1'
    si
    mais quand j'ai remplacer table1."Fin De Formation" par "Fin De Formation" comme vous m'avez dit elle ne veut pas fonctionner
    Voila le message d'erreur:
    Type mismatch in expression
    alors si nombre de fois appartient à table2 il serait peut être bon d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table1,table2 WHERE table1.Numero=table2.Numero and table2."Nombre De Fois" > :P1
    en tenant quand même compte des remarques que j'avais déjà faites à propos de la jointure, du * dans un select

    enfin il existe aussi des intructions Query.Prepare, Query.UnPrepare et d'un état Query.Prepared qui pourraient être utiles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Query.Active:=False;
    if Query.Prepared then Query.UnPrepare;
    Query.SQL.Text:= ........ ;
    Query.Prepare;  
    ....
    Bref, moins de relances, plus de code sur ce que vous avez écrit

    Merci Senior
    je sais que j'ai l'âge de l'être mais bon, pour moi un senior aura toujours à minima 10 ans de plus que moi
    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

  10. #10
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Probleme Resolut
    Merci Seniour
    mais jai une autre question si ne vous derange pas
    comment déclarer dans une table un champ qui contient "Apostrophe"
    par exemple:
    Merci davance

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 854
    Points : 11 287
    Points
    11 287
    Billets dans le blog
    6
    Par défaut
    J'imagine qu'idéalement, ceci ne se fait pas ! Même si c'est techniquement possible. C'est aller au devant des ennuis que d'utiliser de tels noms, non ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  12. #12
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Voila mon Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1.SQL.add(' select * from table1,table2 where table1.Numero=table2.Numero and table1."L'article" > :P1 ');

  13. #13
    Rédacteur/Modérateur

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

    en général pour les noms de colonnes (champs) des tables on utilise des noms abrégés, sans espace ni ponctuation ce qui évite à la fois l'utilisation des " et des problèmes possible de casse et de longueur.

    Donc par exemple pour "l'Article" on nomme la colonne de de la table : ARTICLE
    "Nombre de Fois' devient par exemple NBFOIS
    "Fin Formation" devenant FinFormation, Fin_Formation ou encore tout simplement FIN

    malheureusement je constate que vous persistez avec le Query.SQL.Add à croire que ce que je donne comme réponse ne sert à rien
    pour ce qui est d'une apostrophe il suffit de la doubler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1.SQL.add(' select * from table1,table2 where table1.Numero=table2.Numero and table1."L''article" > :P1 ');
    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

  14. #14
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    jai essayer de la doubler et jai utiliser quotedstr
    et il n'accept pas
    la meuileur facon
    c'est d'eviter les (Apostrophe) et (Espaces) comme vous m'avez dit
    Merci encore Senior

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

Discussions similaires

  1. [RegEx] preg_match d'une chaine qui contient un espace
    Par snorky94 dans le forum Langage
    Réponses: 7
    Dernier message: 20/09/2013, 10h37
  2. Réponses: 2
    Dernier message: 14/04/2010, 14h46
  3. Réponses: 4
    Dernier message: 11/12/2009, 16h50
  4. Réponses: 7
    Dernier message: 21/12/2007, 12h56
  5. Réponses: 4
    Dernier message: 29/10/2005, 18h36

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