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 :

FireDAC TTable la pagination ne marche pas losque la table est filtrée ?


Sujet :

Bases de données Delphi

  1. #1
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut FireDAC TTable la pagination ne marche pas losque la table est filtrée ?
    FireDAC / Delphi 10.3.3

    Bonjour,

    J'ai une TTable dans laquelle j'ai rajouté le filtre suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      FDTable1.Filter:='(hash_config='''+Hashconfig+''')'+
                       ' AND (datetime >= {d ' + (FormatDateTime('yyyy-mm-dd', DateTimeFrom.Date))+'})'+
                       ' AND (datetime < {d ' + (FormatDateTime('yyyy-mm-dd', incDay(DateTimeTo.Date)))+'})';
      FDTable1.Filtered:=true;
    Avant l'ouverture, je fais une pagination:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      FDTable1.FetchOptions.RecsSkip := 0;
      FDTable1.FetchOptions.RecsMax := 100;
      FDTable1.open;
    et la pagination n'est pas prise en compte alors que si je passe Filtered=false, ça marche.
    Cette contrainte n'est pas dans la doc: http://docwiki.embarcadero.com/RADSt...gnes_(FireDAC)

    Est-ce que j'ai loupé quelque chose ?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 041
    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 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Est-ce que j'ai loupé quelque chose ?
    Je ne sais pas mais cela me parait logique pour filtrer la table il faut lire tous les enregistrements.
    Perso j'ai toujours préféré les Querys (qui elles n'auront pas ce problème de pagination)
    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

  3. #3
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Perso j'ai toujours préféré les Querys (qui elles n'auront pas ce problème de pagination)
    Oui je peux comprendre que les Query semblent plus facile d'utilisation grâce au champ SQL mais j'ai besoin de recalculer des colonnes et en utilisant les fonctions SQL je n'arrive pas à obtenir ce que je veux.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 041
    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 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Mais même avec une Query on peut ajouter des champs calculés (et même des aggrégats avec Firedac)
    en utilisant les fonctions SQL je n'arrive pas à obtenir ce que je veux.
    cela dépend beaucoup du SGBD
    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

  5. #5
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Entre temps, j'ai refais des tests et effectivement j'arrive à obtenir les colonnes, le problème c'est que c'est énormément plus long qu'en utilisant les FDtables mais vraiment !
    Cependant comme la fonction de pagination fonctionne avec un Query, je vais voir si je ne m'oriente pas vers cette solution quand même....pas simple quand on traite des tables de plusieurs dixaine de millions d'enregistrements.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Je ne connais pas TFDTable ni TFDQuery mais comme est traduit le filtre** ?
    Selon le provider, le filtre est converti en SQL et finalement le Table c'est juste une Query simplifié, dans d'autres, c'est une récupération des données et fitrer en local.

    Le premier va solliciter le serveur surtout si il n'y a pas d'INDEX*
    Le second va solliciter moins le CPU du serveur mais plus de bande passante et la mémoire du client

    Selon votre SGBD, vous avez plusieurs méthodes pour lancement un SQL, c'est les options du Curseur, il peut être bi ou unidirectionnel, [a]synchrone, paginé ou non.
    Le choix influe énormément selon la volumétrie et les optimisations effectué par le DBA.
    J'ai pu constaté avec ADO qu'il y avait un problème dans l'implementation Delphi d'un curseur client (où justement cela serait un filtre local)

    * il est parfois plus long à éxécuter un SQL mal optimisé que de récupérer 10000 même l'on n'en affiche que 10 répondant au filtre.

    EDIT
    ** on a un début de réponse
    TFDTable et filtrage
    - En mode Fenêtre Données dynamiques, TFDTable utilise le filtrage côté serveur (WHERE) dans les situations suivantes :

    Pour la propriété Filter. Notez que le contenu de la propriété Filter est envoyé à une base de données tel qu'il est. Vous pouvez utiliser les séquences d'échappement FireDAC pour rendre une expression compatible avec un SGBD et avec le moteur d'expression local.
    Pour un TFDTable détail dans une relation maître-détail.
    Quand une plage de valeurs est appliquée à un TFDTable.

    - En mode Fenêtre Données dynamiques, TFDTable utilise le filtrage côté client pour :

    L'événement OnFilterRecord.
    La propriété FilterChanges.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Clause Where qui ne s’exécute pas si la table est vide
    Par Duillon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/08/2019, 09h32
  2. Réponses: 2
    Dernier message: 21/12/2012, 11h28
  3. [PHP 5.0] Système d'auto pagination ne marche pas !
    Par Jean-Mouloud dans le forum Langage
    Réponses: 1
    Dernier message: 23/09/2012, 08h27
  4. Requête qui ne marche pas sur une table Joomla.
    Par tintin72 dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/02/2010, 17h51
  5. new Option : ne marche pas quand le code est en alpha ???
    Par Leoxp dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/12/2005, 15h23

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