Filtrer avec datetimepicker [Résolu]

Messages postés
32
Date d'inscription
vendredi 14 août 2009
Dernière intervention
15 août 2009
- - Dernière réponse : Pierregeorgesalexandre
Messages postés
23
Date d'inscription
mardi 22 novembre 2005
Dernière intervention
5 novembre 2006
- 22 juil. 2006 à 19:27
Bonjour,

Je souhaite avec deux datetimepicker envoyer une requete sur une table par table1.Filter... permettant de filtrer les enregistrements entre deux dates (en provenance du datetimepicker1 et idem2).
les dates sont enregistrées dans la table en String.

Le problème c'est que ça ne marche pas;
Dois-je faire une fonction pour y arriver.
Ou existe-t-il une autre solution?
Merci de votre aide

cordialement

StevenLEFERRAN - CLFrance
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
3
Merci
Bonjour Steven,

Le problème, à mon avis, vient du fait que tes champs date sont de type string.
Dans ce cas, la valeur est enregistrée avec son formatage (sauf si tu as prévu autre chose).
Et donc, on ne peut comparer qu'avec une valeur string ayant le même formatage !
Exemple :
ton champ a la valeur = "02/07/06"
Si DateToStr(DateTimePicker1.Date) te renvoie : "2/07/2006", c'est tout à fait incomparable.
Tu évites ce genre de problèmes avec un champ de type Date.

A +
Thierry

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de ThWilliam
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
0
Merci
Bonjour,

Si tu utilise 'filter' sur une table :

Table.Filter := 'Date >= "'+ DateToStr(DateTimePicker.Date)+'"';

Si c'est une requete, il faut prendre le format anglais de la date :

...

SQL.Add('Where Date >= "'+ FormatDateTime('mm/dd/yy', DateTimePicker.Date)+'"');

...

Si tu veux des enregistrements sur une période, utilise l'opérateur 'And' :

Table.Filter := 'Date >= "'+ DateToStr(DateTimePicker1.Date)+'" And Date <= "'+ DateToStr(DateTimePicker2.Date)+'" ';

Simon
Commenter la réponse de sp40
Messages postés
32
Date d'inscription
vendredi 14 août 2009
Dernière intervention
15 août 2009
0
Merci
Je te remercie,
mais j'ai déjà essay avec table1.Filter.... et ça ne marche pas.
je vais réessayer !
merci

Steven LE FERRAN - CLFrance
Commenter la réponse de stevenleferran
Messages postés
32
Date d'inscription
vendredi 14 août 2009
Dernière intervention
15 août 2009
0
Merci
Bonjour thierry,

je te remercie pour les informations.
Dans le module de bdd de delphi, la type de champ date est : D.

merci encore
a+

Steven LE FERRAN  - CLFrance
Commenter la réponse de stevenleferran
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
0
Merci
Re-bonjour Steven,

Je viens de vérifier la valeur renvoyée par "DateTimePicker1.Date". Elle comprend la date et le temps.
Pour pouvoir tester l'égalité entre 2 dates : il faut arrondir la valeur renvoyée (puisque la partie entière d'une variable TDateTime correspond aux jours) :
Trunc( DateTimePicker1.Date);

Essaie ceci avec un TEdit et un TDateTimePicker  et renseigne les 2 mêmes dates.

if StrToDate(edit1.Text) = Trunc(DateTimePicker1.Date) then
    showmessage('date identique');   // ça marche
if StrToDate(edit1.Text) = DateTimePicker1.Date then
    showmessage('date identique');   // ça ne marche pas

A +
Thierry
Commenter la réponse de ThWilliam
Messages postés
23
Date d'inscription
mardi 22 novembre 2005
Dernière intervention
5 novembre 2006
0
Merci
j ai trouvé ceci ici meme

cela corrrespondant peut etre à ta recherche

bien cordialement Pierre

<<<<<<<<<<<<<
unit U_appication;
{ Ce projet et réaliser Par BENOMRANE BRAHIM le prejet n'est Pas completement
Parfait il y a plusier programmer peuve se réduire avec un peut de temps
pour Plus d'information
  http://brahimnet.ifrance.com
  Projet réaliser par delphi7
  Projet Réaliser en 15 Mai 2006

}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, ExtCtrls, DB, DBTables, StdCtrls, DBCtrls,
  ComCtrls, Menus,ShellAPI, Buttons;

type
  TMain = class(TForm)
    DataSource: TDataSource;
    Db: TQuery;
    Panel1: TPanel;
    DBGrid1: TDBGrid;
    DbID: TFloatField;
    DbIntitule: TStringField;
    DbDebit: TFloatField;
    DbCredit: TFloatField;
    StatusBar1: TStatusBar;
    DbDt: TDateField;
    PopupMenu1: TPopupMenu;
    Nouveau1: TMenuItem;
    Modifier1: TMenuItem;
    Supprimer1: TMenuItem;
    GroupBox1: TGroupBox;
    Label4: TLabel;
    dt_au: TDateTimePicker;
    Dt_du: TDateTimePicker;
    Label3: TLabel;
    Active_Filtre: TCheckBox;
    Button1: TButton;
    Label1: TLabel;
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure FormCreate(Sender: TObject);
    procedure Nouveau1Click(Sender: TObject);
    procedure Modifier1Click(Sender: TObject);
    procedure Supprimer1Click(Sender: TObject);
    procedure DbNewRecord(DataSet: TDataSet);
    procedure Dt_duCloseUp(Sender: TObject);
    procedure DbPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure Button1Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
  private
//déclaration
  Tri_dec:Boolean; // le choix du Tri soit descendant ou ascendant
  Key_Id:double;   //  variable  pour la recherche ID dans La Mise a jour

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Main: TMain;

implementation

uses u_Saisir;

{$R *.dfm}
procedure TMain.DBGrid1TitleClick(Column: TColumn);
VAr
Tri_Ch:String;
I:integer;
begin
//vérifier si le tri et descandant ou ascendant
if Tri_dec=True Then
    begin
    Tri_ch:=' ASC';
    Tri_dec:=False;
    end
  ELSE
    begin
    TRi_Ch:=' DESC';
    Tri_Dec:=True;
    end;
Db.Close;
db.SQL.Clear;
db.SQL.Add('Select * FROM DB ORDER BY '+Column.Field.DisplayName+Tri_ch);
db.open;
Statusbar1.Panels.Items[0].Text:='Tri Par '+Column.Field.DisplayName+' '+Tri_Ch;
// coloré tout les titre en Noir
For i:=0 to dbgrid1.Columns.Count-1 Do
  dbgrid1.Columns.Items[i].Title.Font.Color:=clblack;
//coloré le tite de Tri En Rouge
dbgrid1.Columns.Items[column.Index].Title.Font.Color:=clred;
end;

procedure TMain.FormCreate(Sender: TObject);
begin
  Tri_dec:=True; //initialtion La Tri descandant
end;

procedure TMain.Nouveau1Click(Sender: TObject);
begin
Db.Append;
saisir_.ShowModal;
end;

procedure TMain.Modifier1Click(Sender: TObject);
begin

Key_Id:=dbID.Value; //permutation pour pouvoire recherche Ds la BD

  Db.Close;
  db.SQL.Clear;
  db.SQL.Add('Select * FROM Db' );
  db.open;
//rechercher DS la base de donnée
if db.Locate('ID',Key_ID,[loPartialKey]) THEN
  begin
  Db.Edit;
  saisir_.ShowModal;
  end;
end;

procedure TMain.Supprimer1Click(Sender: TObject);
begin
if Db.RecordCount= 0 then Exit; //aucune suppression ds le cas si la base et vide

Key_Id:=dbID.Value; //permutation pour pouvoire recherche Ds la BD

  Db.Close;
  db.SQL.Clear;
  db.SQL.Add('Select * FROM Db' );
  db.open;
//rechercher DS la base de donnée
if db.Locate('ID',Key_ID,[loPartialKey]) THEN
  begin
   if MessageDlg('Confirmer La suppression',
      mtConfirmation, [mbYes, mbNo],0) = mrYes then
      Db.Delete;
  end;

end;

procedure TMain.DbNewRecord(DataSet: TDataSet);
begin
//initialisation des données
dbDt.Value:=now;
dbcredit.Value:=0;
dbdebit.Value:=0;

end;

procedure TMain.Dt_duCloseUp(Sender: TObject);
begin

db.Filter:='(Dt>='''+DatetoStr(Dt_du.date)+''')And (Dt<='''+DateToStr(Dt_Au.date)+''')';
if Active_Filtre.Checked=true Then db.Filtered:=True else db.Filtered:=False

end;

procedure TMain.DbPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
Raise Exception.Create('Cet ID Existe Déja veillez Le mofidier SVP');
end;

procedure TMain.Button1Click(Sender: TObject);
Var
Total_Debit,Total_Credit:Double;
  SavePlace: TBookmark;
begin
SavePlace :=db.GetBookmark;
TRY
  //Ititialisation  des Totaux
  Total_Debit:=0;Total_Credit:=0;
  db.DisableControls;
  db.First;
  while Not Db.Eof do
    BEGIN
    Total_Debit:=Total_Debit+Dbdebit.Value;
    Total_Credit:=Total_Credit+dbcredit.Value;
    db.Next;
    end;
 finally
    db.EnableControls;
     if SavePlace <> nil then
     begin
       Db.GotoBookmark(SavePlace);
       db.FreeBookmark(SavePlace);
     end;

  Showmessage('Résultat des calcule est: '#13''#13'Total Débit= '+Format('%m',[Total_debit])+
  ''#13'Total Crédit= '+Format('%m',[Total_credit]));
 end;
end;
procedure TMain.Label1Click(Sender: TObject);
begin
  ShellExecute(0,'open', 'http://brahimnet.ifrance.com',
                                          nil, nil, SW_SHOWMAXIMIZED);

end;

end.

>>>>>>>>>>>>>>>>>
Commenter la réponse de Pierregeorgesalexandre

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.