Filtrer avec datetimepicker [Résolu]

stevenleferran 32 Messages postés vendredi 14 août 2009Date d'inscription 15 août 2009 Dernière intervention - 30 juin 2006 à 16:42 - Dernière réponse : Pierregeorgesalexandre 23 Messages postés mardi 22 novembre 2005Date d'inscription 5 novembre 2006 Dernière intervention
- 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
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 2 juil. 2006 à 12:58
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

Merci ThWilliam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de ThWilliam
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 30 juin 2006 à 17:50
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
stevenleferran 32 Messages postés vendredi 14 août 2009Date d'inscription 15 août 2009 Dernière intervention - 2 juil. 2006 à 02:02
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
stevenleferran 32 Messages postés vendredi 14 août 2009Date d'inscription 15 août 2009 Dernière intervention - 2 juil. 2006 à 13:18
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
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 2 juil. 2006 à 13:40
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
Pierregeorgesalexandre 23 Messages postés mardi 22 novembre 2005Date d'inscription 5 novembre 2006 Dernière intervention - 22 juil. 2006 à 19:27
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.