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 avec un filtre entre deux dates


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 30
    Points : 24
    Points
    24
    Par défaut Probleme avec un filtre entre deux dates
    Salut tout le monde j’ai le code suivant :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    procedure TForm4.Button1Click(Sender: TObject);
    var Total :double ;
          j: Integer ;
          tableux : array[0..15]of string ;
          Mypage : TRavePage ;
          date1,date2 : string ;
     
    begin
     
    tableux[0]:='21-31';
    tableux[1]:='22-31';
    tableux[2]:='23-31';
    tableux[3]:='21-33';
    tableux[4]:='22-33';
    tableux[5]:='23-33';
    tableux[6]:='24-33';
    tableux[7]:='21-34';
    tableux[8]:='22-34';
    tableux[9]:='23-34';
    tableux[10]:='24-34';
    tableux[11]:='25-34';
    tableux[12]:='92-34';
    tableux[13]:='94-34';
    tableux[14]:='98-34';
    tableux[15]:='21-35';
     date1:='01-02-2012';
     date2:='29-02-2012';
     table1.Filtered:=True;
    Table1.Filter:='Date_demission>='+date1+'Date_demission<='+date2;
    table1.Refresh;
    table1.First;
    while not table1.EOF do
    for j:=0 to 15 do
    begin
    Total:=0;
    table1.Filter:='Imputation='+QuotedStr(tableux[j]);
    table1.Filtered:=True;
    table1.Refresh;
    //******** addition ******///
    table1.First;
    while not table1.EOF do
    begin
       Total := Total + table1.FieldByName('Montant').AsFloat;
       table1.Next;
    end;
     
    With RvProject1.ProjMan  do
            begin
    RvProject1.open;
    MyPage := FindRaveComponent('Report1.Page1',nil) AS TRavePage ;
    (FindRaveComponent('T'+ IntToStr(j) ,MyPage) AS TRaveText).Text := FloatToStr(Total);
     
            end;
     
    end;
    RvProject1.Execute;
    end;
    Il me génère cette erreur et je comprend pas ou est le problème !! aidez moi svp

    Le projet Project1.exe a déclenché la classe d'exception EDatabaseError avec le message 'Expression filtre terminée incorrectement'.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Ton filtre est ainsi:

    Date_demission>=01-02-2012Date_demission<=29-02-2012

    Qu'en penses-tu ?

  3. #3
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    Slt

    comme l'indique Andnotor
    La chaîne de caractère passée au filtre est mauvaise.

    Essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.Filter:='Date_demission>='+QuotedStr(date1)+' and Date_demission<='+QuotedStr(date2);
    Attention au formatage de la date!!!
    Il se peut que tu doives la formater en 'YYYY-MM-DD'

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    merci maitenant il me génère pas une erreur mail il fait pas le filtrage !!

    J’ai un problème avec le filtre de date il ne prend pas les enregistrements entre l’intervalle entre les deux (date 1 et date 2 ) mai il me prend le tout je comprend pas pourquoi !!
    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
     
    edit1.Text:=date1;
    edit2.Text:=date2;
     
    //***************************************************
     
    table1.Filter:='Date_demission>='+QuotedStr(date1)+'and'+' Date_demission<='+QuotedStr(date2);
    table1.Filtered:=True;
    while not table1.EOF do
    for j:=0 to 15 do
    begin
    Total:=0;
    table1.Filter:='Imputation='+QuotedStr(tableux[j]);
    table1.Filtered:=True;
    table1.Refresh;
    //******** addition ******///
    table1.First;
    while not table1.EOF do
    begin
       Total := Total + table1.FieldByName('Montant').AsFloat;
       table1.Next;
    end;
    matrice[j,indice]:=Total ;
    With RvProject1.ProjMan  do
    begin
    RvProject1.open;
    MyPage := FindRaveComponent('Report1.Page1',nil) AS TRavePage ;
    (FindRaveComponent('T'+ IntToStr(j) ,MyPage) AS TRaveText).Text := FloatToStr(Total);
    end;
    end;
    aidez moi svp

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    La bonne solution serait (peut-être) de repenser la chose

    Je vois qu'il s'agit en fait de faire un état Rave . Tout ce traitement pour obtenir une seule valeur et exécuter 16 états , il y a de quoi se

    1. Tout d'abord rave peut faire se genre de calcul simplement en posant un CalcText
    2. Ensuite Rave peut se charger de faire des groupes (les fameux tableux) ce qui permettrait de n'avoir qu'un seul état , pas 16


    Quant aux dates ( je ne répéterai jamais assez que je hais les filtres ) table1 serait bien avantageusement remplacée par une query du genre

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM LATABLE
    WHERE DATE_DEMISSION BETWEEN :DATE1 AND :DATE2
    ORDER BY IMPUTATION       // ceci pour les groupes rave

    Enfin , quant au code lui même , l'erreur vient du fait que le Filtre 2 (celui sur Imputation) écrase allègrement le Filtre1 (sur les dates)
    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

  6. #6
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    Slt,

    il y a qqch qui m'ennuie dans ton code...
    tu filtres la 1ère fois sur les dates
    et ensuite, tu refiltres la table...
    ce qui veut dire que tu annules ton 1er filtre

  7. #7
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Bonjour

    En plus, il n'y a pas une petite inversion sur les affectations de Date1 et Date2 ?

Discussions similaires

  1. [AC-2007] Filtres entre deux dates.
    Par toinehxc dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 04/12/2012, 15h40
  2. Filtre entre deux dates
    Par Christ79 dans le forum VBA Access
    Réponses: 18
    Dernier message: 01/06/2012, 08h39
  3. [SPS07] Comment faire un filtre entre deux dates ?
    Par Tybo34 dans le forum Développement Sharepoint
    Réponses: 11
    Dernier message: 23/07/2010, 09h42
  4. [vb6]probleme avec Condition If entre deux Maskedbox
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/06/2008, 22h36
  5. [ADO Table] Filtre entre deux dates
    Par aliwassem dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/04/2007, 12h36

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