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 :

xE2 select entre 2 dates


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 391
    Points : 189
    Points
    189
    Par défaut xE2 select entre 2 dates
    Bonjour

    Je suis a mes premiers select en MsSql j'ai execute la commande directement sur MsSql serveur management et ca fonctionne voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    declare @debut date = ' 2013-02-02'
    declare @fin date = ' 2013-02-06'
    select * from BILLET.dbo.BILLET  where D_DATE between @debut and @fin and D_CODE1='ville' AND D_NOCONT='REG'
    comment en delphi devrais-je faire

    ma date de depart est un DATETIMEPICKER1.DATE
    et ma date de fin est aussi un DATETIMEPICKER1.DATE

    voici un test en delphi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
          DATEDEPART:=datetostr(DATETIMEPICKER1.DATE-1);
          DATEDEFIN:=datetostr(DATETIMEPICKER1.DATE+7);
     
     
          codesql:='Select * from BILLET.dbo.BILLET  where D_DATE ';
          codesql:= codesql+ 'between '+ @DATEDEPART ;
          codesql:= codesql + 'AND '+ @DATEDEFIN;
     
        SHOWMESSAGE(CODESQL); 
     
        MsQuery1.Active:=false;
        MsQuery1.SQL.Text:=codesql;
        MsQuery1.Active:=true;
    info supplementaire le champ d_date est un champ date

    et bien sur que ca fonctionne pas

    Merci de me donné quelques informations

    Mario

  2. #2
    Rédacteur/Modérateur

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

    il faut utiliser une requête paramétrée

    MsQuery1.Active:=false;
    MsQuery1.SQL.Text:='Select * from BILLET.dbo.BILLET where D_DATE BETWEEN :FROMDATE AND :TODATE';
    msQuery1.ParamByName('FROMDATE').asDateTime:=DateTimePicker1.Date-1;
    msQuery1.ParamByName('TODATE').asDateTime:=DateTimePicker1.Date+7;
    MsQuery1.Active:=True;
    P.S. j'ai renommé les paramètres uniquement pour ne pas avoir de smileys
    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 habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 391
    Points : 189
    Points
    189
    Par défaut Xe2 Select entre deux date
    Merci M.Girard

    Merci pour votre réponse rapide ca fonctionne très bien pour un select entre deux dates.

    J'ai un autre question pour vous si jeux ajouter deux condition a mon select

    pour continuer

    ..... and D_CODE1='ville' AND D_NOCONT=combobox1.text;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MsQuery1.Active:=false;
    MsQuery1.SQL.Text:='Select * from BILLET.dbo.BILLET where D_DATE BETWEEN :FROMDATE AND :TODATE';
    msQuery1.ParamByName('FROMDATE').asDateTime:=DateTimePicker1.Date-1;
    msQuery1.ParamByName('TODATE').asDateTime:=DateTimePicker1.Date+7;
    MsQuery1.Active:=True;
    Est-ce que je devrais continué avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MsQuery1.SQL.Text:='Select * from BILLET.dbo.BILLET where D_DATE BETWEEN :FROMDATE AND :TODATE and d_code = :ville and  D_nocont = :contrat';
    msQuery1.ParamByName('FROMDATE').asDateTime:=DateTimePicker1.Date-1;
    msQuery1.ParamByName('TODATE').asDateTime:=DateTimePicker1.Date+7;
    msQuery1.ParamByName('ville').asstring:='VILLE';
    msQuery1.ParamByName('contrat').asstring:=combobox1.text;
    MsQuery1.Active:=True;
    ca fonctionne mais est-ce la bonne méthode

    Merci

    Mario

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par mario9 Voir le message
    ça fonctionne mais est-ce la bonne méthode
    a mon avis oui !
    bien sur on pourrait dire que la partie
    fait référence a une constante

    on pourrait écrire directement , cependant il faudrait doubler les ' , ce qui peut entrainer des sources d'erreurs
    en fait , ce que j'aime moins c'est le SELECT * , je préfère indiquer les champs dont j'ai réellement besoin .

    Pour plus de lisibilité on peut aussi faire de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MSQuery1.Active:=False;
    MsQuery1.SQl.Clear;
    MsQuery1.SQL.Add('Select * from BILLET.dbo.BILLET');
    MsQuery1.SQL.Add('where D_DATE BETWEEN :FROMDATE AND :TODATE');
    MsQuery1.SQL.Add('and d_code = :ville'); // remplaçable par MsQuery1.SQL.Add('and d_code ='+QuotedStr('VILLE')); 
    MsQuery1.SQL.Add('and  D_nocont = :contrat');
    msQuery1.ParamByName('FROMDATE').asDateTime:=DateTimePicker1.Date-1;
    msQuery1.ParamByName('TODATE').asDateTime:=DateTimePicker1.Date+7;
    msQuery1.ParamByName('ville').asstring:='VILLE'; // inutile en cas de l'utilisation du remplacement proposé
    msQuery1.ParamByName('contrat').asstring:=combobox1.text;
    MsQuery1.Active:=True;
    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 habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 391
    Points : 189
    Points
    189
    Par défaut Xe2 Select entre deux date(suite)
    Merci pour votre réponse rapide

    Je suis chanceux d'avoir un cours accéléré sur les MsQuery

    Ca tres bien fonctionné je vais passé a l'étape suivante

    Ce résultat du MsQuery je dois le mettre dans une vue pour pouvoir
    traité les informations obtenues ou je peux travaillé directement sur le résultat obtenue

    Je vais allé lire sur la création des Vues et l'utilisation.

    pour faire une autre étape sur le SQL

    Merci beaucoup

    Mario

  6. #6
    Rédacteur/Modérateur

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

    Ma réponse était valable quelque soit le SGBD , pas forcément msSQL .

    ce qui me chagrine c'est cette phrase
    Ce résultat du MsQuery je dois le mettre dans une vue
    une Vue , d'un point de vue SQL ne contient pas de données mais uniquement du SQL .

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create view vplanes (make, model) as
      select make, model from jets
        union
      select make, model from props
        union
      select make, model from gliders

    (pour Firebird 2.5)

    pour pouvoir par exemple obtenir par la suite une interrogation du Style
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM vplanes WHERE make='AIRBUS'

    à moins que par vue tu veuilles dire forme ou fiche , mais du coup il ne s'agit plus de SQL mais de programmation "classique"
    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 habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 391
    Points : 189
    Points
    189
    Par défaut Xe2 Select ,vue Msquery
    Merci de prendre quelque minutes pour me repondre

    Si je fait un résumé de vos explications. comparaison avec la commande Filter du BDE.

    Quand j'utilise table.filter je peux continuer a travailler sur ma table mais avec moins de données selon les condition demander.

    La vue va me permettre de travailler virtuellement sur ma table en reduisannt le nombre de champs et le nombre de fiches a l'interieur de ma vue selon les condition.

    Mais comment je dois faire pour utiliser le resultat de mon MsQuery il me manque un peut d'information sur ce sujet(excuser moi de mon ignorance)
    je suis capable de l'associer a un dbgrid et voir le resultat mais si je veux utiliser les résultats (informations) dans mon programme comme affiche le contenu du champ1.


    Merci encore

    Mario

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    [quote=mario9;7604115]
    Si je fait un résumé de vos explications. comparaison avec la commande Filter du BDE.
    Quand j'utilise table.filter je peux continuer a travailler sur ma table mais avec moins de données selon les condition demander.
    [\QUOTE]
    le filter en SQL est remplacé par le WHERE ......

    La vue va me permettre de travailler virtuellement sur ma table en reduisannt le nombre de champs et le nombre de fiches a l'interieur de ma vue selon les condition.
    Oui et Non ,c'est le virtuel qui me gène un peu. Une vue , en parlant SGBD, est une structure (un objet différent d'une table) qui ne contient aucune données mais un SQL .

    Mais comment je dois faire pour utiliser le résultat de mon MsQuery
    c'est la même chose qu'avec le BDE , utilisez un datasource , lié à la query

    Maintenant attention, tous les composants xxxxxxxQuery ne sont pas forcément multidirectionnel (je pense par exemple aux UIBQuery)
    les mises à jour dans la DBGrid se feront souvent via un UpdateSQL lié à la Query (dans le cas de l'utilisation des ZEOSDBO par exemple)

    indiquez précisément la famille de composants que vous utilisez :
    IBX,DBExpress,ADO etc...

    (MSQuery pour moi c'est le nom donné , je ne connais aucun composant TMSQuery )

    [edit] j'ai vu ,après coup, la version Delphi : XE2 pro ou entreprise ?
    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

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

Discussions similaires

  1. selection de donnée entre deux date
    Par chalcol dans le forum Oracle
    Réponses: 3
    Dernier message: 11/03/2009, 10h23
  2. Clause WHERE pour SELECT entre deux dates
    Par arogues dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/04/2008, 17h42
  3. Selection entre deux dates
    Par Kaiba dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/07/2007, 15h49
  4. Réponses: 1
    Dernier message: 05/10/2006, 04h20
  5. [MySQL] SELECTION DE TEMPS ENTRE 2 DATES
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/04/2006, 01h54

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