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 :

Une requête SQL sur 2 Dates


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut Une requête SQL sur 2 Dates
    Bonjour à tous,
    Voilà, j'aurais besoin d'implémenter une requête SQL qui aurait pour résultat:

    Tous les enregistrements de Ma table : Appel.DB Dont la Date de parution serait comprise entre deux dates.

    La table est de Typearadox.
    Les deux dates en question sont saisies à travers 2 TDateTimePicker.

    J'ai un soucis avec les opérateurs que je peux utiliser, car la condition serait:
    Where Date_Parution DateTimePicker1.Date et Date_Parution DateTimePicker2.Date
    C'est à dire que les 2 dates choisies douvent impérativement être comprise dans l'interval
    J'ai aussi le problème des formats...
    Quand les dates sont saisies dans la TAble à travers des DBedits elles ont le format suivant: jj/mm/aaaa (J'ai appliqué un Mask de saisie)
    danc ce cas, le problème du format de: jj/mm/aaaa et aaaa/mm/jj se pose t'il???

    Merci+++++

  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 844
    Points
    24 844
    Par défaut
    VOIR ICI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.SQL.Text := Format(' ... CHAMP_DATE = CAST("%s" as DATE) ...', [FormatDateTime('DD/MM/YYYY', DateTimePicker1.Date)])
    La syntaxe CAST est conforme au SQL92

    Sinon voir aussi avec ParamByName ...
    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 souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Merci+++
    Mais j'ai pas trés bien saisi comment insérer ton code dans le mien
    J'ai pour exemple, ce petit bout de code qui marche trés bien lors de la selection du Champs Type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFConsultationApp.suiButton2Click(Sender: TObject);
     Var
    VType,:String;
     
    begin
       VType:=ComboBType.Text;
       Datamodule3.QueryApp.SQL.Clear;
       Datamodule3.QueryApp.SQL.ADD('SELECT * FROM "Appel.DB"');
       Datamodule3.QueryApp.SQL.ADD('WHERE Type LIKE :ParamType');
       DataModule3.QueryApp.Params[0].AsString := VType;
       Datamodule3.QueryApp.Active:=true;
       EdResult.Text:=Inttostr(Datamodule3.QueryApp.recordcount);
    end;
    Pour les dates, j'utiliserais alors : ParamDatSup et ParamDatInf

    Comment integrer le tout alors???

  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 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    sous paradox BETWEEN fonctionne pour les dates , voici un exemple
    ou (DD)DateDébut == Date inférieure et (DF) DateFin == Date Supérieure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with Query1 do
      begin
        Close;
        SQL.Clear;
         SQL.Add('SELECT * FROM TEST');
        SQL.Add('WHERE  Date_L BETWEEN :D AND :F');
        ParamByName('D').asDate:=DD;
        ParamByName('F').asDate:=DF;
        Prepare;
        Open;
      end;
    l'avantage de passer par les paramètres est que le format est géré par BDE ?

    toutefois je suis comme 'Trollmignon' jusqu'a présent j'avais toujours préféré utiliser les CAST(s) maintenant ... je suis moins sur , surtout que je viens de lire (merci @SQLPRO) qu'il valait mieux privilégié BETWEEN qu'un test >= AND <=
    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
    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 844
    Points
    24 844
    Par défaut
    Euh, rien n'empêche de mettre, du moins je pense ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE  Date_L BETWEEN CAST("%s" as DATE) AND CAST("%s" as DATE)
    Mais les ParamByName, c'est très bien, cela fonctionne aussi pour les relations avec un MasterSource
    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

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Avec Paradox, tu auras de meilleurs performances si tu utilises un TTable avec un index sur le champ Date et que tu fais un SetRange.

    Sinon pour les requêtes avec les dates, moi c'est toujours requête paramétrée. Tu ne peux jamais être sûr du format des dates attendu par le SGBD car ce dernier peut être configuré utilisateur par utilisateur...
    SQLServer possède cependant un format de date universelle ('TTTTMMDD') qui est toujours compris par le SGBD. Avec Oracle tu peux faire un TO_DATE et préciser le format de la date.
    Cependant ça reste se prendre la tête pour rien car avec une requête paramétrée le problème est réglé...

Discussions similaires

  1. [WD16] Faire une requête SQL sur une table ?
    Par EriCstoFF dans le forum WinDev
    Réponses: 9
    Dernier message: 01/09/2011, 10h16
  2. Réponses: 1
    Dernier message: 03/04/2009, 10h09
  3. mettre une requête SQL sur deux lignes
    Par MAMANHOU dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/11/2008, 15h37
  4. [C++B5]Problème avec une requëte SQL sur BDD ACCESS
    Par Sleeping Lionheart dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/04/2008, 09h03
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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