Filter table

souhila2011 Messages postés 6 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 29 mai 2011 - 28 avril 2011 à 11:40
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 - 2 mai 2011 à 21:40
Bonjour

SVP, comment faire pour filter une table en ayant par exemple toutes les valeurs comprises entre valeur1 et valeur2?

Voici ce que j'ai fait mais ça donne une erreur en compilant le projet

adotable1.Filtered:=false;
adotable1.Filter:='val > ' + quotedstr(edit1.Text) + 'val< ' + quotedstr(edit2.Text);
adotable1.Filtered:=true;
adotable1.First;

Merci

4 réponses

pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
28 avril 2011 à 21:43
Bonjour,
Pour ce cas de figure (prendre toutes les valeurs entre un min et un max) il existe la portée.
1 - Mette l'ensemble de données à l'état dsSetKey
2 - Définir la valeur de début de la portée
3 - Définir la valeur de fin de la portée
4 - Appliquer la portée
Ce qui donne en Delphi
With Table1 do begin
// Place l'ensemble de données à l'état dsSetKey
SetRangeStart; // et début de la portée. Valeur min aaaaa
FieldByName('Nom') := Edit1.Text;
SetRangeEnd, // Fin de la portée. valeur MAX ccccc
FieldByName('Nom') := Edit2.Text;
ApplyRange;
end;

Pour annuler la portée Table1.CancelRange;

Cordialement
pierrot
0
Mef_Fatma Messages postés 3 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 7 août 2011
30 avril 2011 à 10:34
Bonjour,
Pour qu'il n y aura pas d'erreur de compilation il faut respecter deux choses dans ton cas:
1- Edit1.Text et Edit2.Text doivent contenir des valeurs du même type que le champ VAL de ta table (adotable1);
2- La longueur du text contenu dans Edit1 et edit2 doit être au maximum le même que celui de ton Champ VAL.

J'espère que j'ai pû vous aider, sinon, veuillez noter le code d'erreur de votre compilation.
Merci
0
souhila2011 Messages postés 6 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 29 mai 2011
2 mai 2011 à 10:55
Bonjour,

Merci pour pierrotk10d et Mef_Fatma pour votre réponse,
En appliquant le code de pierrotk10d j'ai les messages d'erreur suivant :

[Error] Unit1.pas(273): Undeclared identifier: 'SetRangeStart'
[Error] Unit1.pas(274): Left side cannot be assigned to
[Error] Unit1.pas(274): Incompatible types: 'TField' and 'TCaption'
[Error] Unit1.pas(275): Undeclared identifier: 'SetRangeEnd'
[Error] Unit1.pas(276): Left side cannot be assigned to
[Error] Unit1.pas(276): Incompatible types: 'TField' and 'TCaption'
[Error] Unit1.pas(277): Undeclared identifier: 'ApplyRange'
[Fatal Error] Project1.dpr(7): Could not compile used unit 'Unit1.pas'


Pour répondre à Mef_Fatma :
>J'espère que j'ai pû vous aider, sinon, veuillez noter le code d'erreur de votre >compilation.

Voici le code d'erreur :
project Projects1.exe raised exception class EOLEcveption with message 'Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit les uns avec les autres'. Proces stopped. Use Step or Run to continue.

Merci à tous
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
2 mai 2011 à 21:40
Bonjour,
Erreur de ma part il faut écrire pour un champs "String"
FieldByName('Nom').AsString := Edit1.Text;
ou
FieldValues['Nom'] := Edit1.Text;
SetRangeEnd;
et mettre les types des champs en concordance avec le contenu des TEdit
si le champs est un "Integer" il faut écrire
FieldValues['Numero'] := StrToInt(Edit1.Text);
ou
FieldByName('Numero').AsInteger := StrToInt(Edit1.Text);

pierrot
0
Rejoignez-nous