Filter, trie sur Date [Résolu]

Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
- - Dernière réponse : cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
- 11 juin 2008 à 15:48
Bonjour,

J'utilise un TibTable pour afficher le contenu d'une table.
J'y applique un filtre pour afficher une ligne voulu, mais une erreur se produit a cause du ORDER BY. Or je voudrais filtrer et également appliquer un trie sur la colonne date.
            Filter :'CodeSicav '''+qrSicavCode.AsString+''' AND Etat = ''P'' AND NomCpt = '''+cbCompte.Text+''' ORDER BY Achat ASC';
            Filtered := True;

Comment faire cela ?

Merci pour l'aide.
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
3
Merci
ah yès, ces compos que je n'utilise pas sont en lecture seule..

Tu dois te servir du composant additionnel : IBUpdateSQL.

cantador

Dire « Merci » 3

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

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
3
Merci
En effet en liant mon TibQuery avec un TibUpdateQuery, je peux faire un select, me positionner sur l'enregistrement voulu et faire la modification.

SQL.Clear;
SQL.Add('SELECT....FROM....WHERE....AND....ORDER BY....');

Open; First;
Edit;
   ...
   FieldByName('Vente').AsDateTime := deVal.Date;
   ...
Post;
Close;

 Merci Cantador pour l'aide...

Dire « Merci » 3

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

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de grandyaka54
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
Bonjour grandyaka54,

tu ne peux pas metttre ORDER BY dans un filtre car le filtre représente la clause WHERE d'un SQL.


si tu veux les deux, il faut appliquer une requête SQL sur ta table :

procedure TForm1.Button1Click(Sender: TObject);
begin
With MonTIBQuery.SQL do
   begin
      Add('Select * from MaTable ');
      Add('WHERE CodeSicav =:SICAV ');  // tu peux ajouer d'autres paramètres
      Add('ORDER BY Achat ');      // order by
      MonTIBQuery.ParamByName('SICAV').Value := SICAV.text;
      MonTIBQuery.Open;
   end;
end;

cantador
Commenter la réponse de cs_cantador
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
0
Merci
Oki merci, j'avais un doute mais j'ai quand meme voulu poser la question.
Donc, je vais utiliser un TibQuery.

Par contre, est-il possible avec une requete Select, une fois positionné sur le 1er enregistrement par exemple (avec First) de modifier cette ligne ?
Commenter la réponse de grandyaka54
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
En principe, la table se met par défaut à l'ouverture sur le premier enregistrement
(même sur une requête filtrante avec tri)

et bien sûr, il est tout à fait possible de se positionner sur un enregistrement particulier (premier, dernier ou un autre avec la méthode locate)

et de procéder à une modification de l'ensemble des champs de cet enregistrement par les méthodes classiques (edit et post)

cantador
Commenter la réponse de cs_cantador
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
0
Merci
Ok, en gros, j'ai fais ceci :

  SQL.Clear;
  SQL.Add('Select...From...Where...And...Order by...');

  Open; First;
  //Je me positionne sur le 1er enreg et souhaite modifier cette ligne meme avec
  
  Edit;
     ...
     FieldByName('Vente').AsDateTime := deVal.Date;
     ...
  Post;

  Close;

Apparemment ceci marche pas, ou alors il me manque quelque chose ou j'ai une erreur. J'ai ce message d'erreur : "Impossible de modifier un ensemble de données en lecture seule".
Commenter la réponse de grandyaka54
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
0
Merci
J'ai trouvé une autre solution qui marche aussi bien.

Je garde mon IBTable, je l'ouvre, j'applique un filtre et à ce moment là, avant de faire un First pour me positionner sur le 1er enregistrement, j'utilise IndexFieldNames := 'DATE'. Ce qui me permet d'indexé la colonne date.
Commenter la réponse de grandyaka54
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
avec TIBTable, tu peux même débrancher UpDateObject !
et sur une autre table CUSTOMER par exemple :
  IBTable1.Edit;
  IBTable1LASTINVOICEDATE.AsDateTime := DateTimePicker1.DateTime;
  IBTable1.Post;
Le TIBTable est possible mais cela dit dès que ta base se complique, on est obligé de passer en Query..

Ces compos ne sont néanmoins pas terribles à l'usage..

cantador
Commenter la réponse de cs_cantador