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

MS SQL Server Discussion :

Filtre et Tri avec ADODB


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 54
    Points : 48
    Points
    48
    Par défaut Filtre et Tri avec ADODB
    Bonjour,

    J'ai un soucis avec ADODB connecté à un seveur SQL-Server et plus précisément sur la combinaison tri/filtre.

    Pris chacun de son coté, il n'y a pas de problème, mais lorsque j'applique un filtre, puis un tri, le nombre d'enregistrement n'est plus le même !

    -> Admettons que mon jeu original contienne 300 enregistrements, quelque soit la clé de tri, croissant ou décroissant, j'ai toujours 300 enregistrements.
    -> Si j'applique un filtre (propriété .Filter), mon jeu tombe à 30 enregistrements, ce qui est conforme à mon filtre
    -> Si je change le tri (propriété .Sort), sur le jeu filtré, je me retrouve à avoir les 6 premiers dans l'ordre croissant, et les 9 derniers dans l'ordre décroissant!

    J'ai beau cherché, je ne vois pas d'ou ça vient ... Quelqu'un peut-il m'aider ?

    Mon recordset ADODB est connecté via la connexion d'un projet ADP d'Access, le curseur est coté client, de type Keyset, enfin, il est en lecture seul (je ne fais que de l'affichage ... pas de mise à jour)

    Merci,

    TALERE

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Sans la description DDL de la table, la requête en jeu et un jeu de données... !

    ma boule de cristal est devenue aveugle....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Les pilotes ADODB sont souvent buggés, et il est très courant de tomber sur des bugs ou même des fonctionnalités absentes (chaque éditeur de SGBD écrivant ses pilotes dans son coin).

    En il vaut mieux se limiter strictement à :
    - interrogation en langage SQL
    - récupération du résutlat sans post-traitement

    Si vous voulez faire des tris et filtres :
    - ajouter ORDER BY et WHERE dans vos requêtes SQL
    - effectués ces traitements vous-même sur le jeu de résultat, en émplémentant vos propres méthodes de tri et de filtre.
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 54
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Merci pour vos réponses ... Mes investigations m'ont mené aux conclusions suivantes : L'erreur se produit à l'application d'un filtre, lorsque la clé de tri a été modifié depuis l'ouverture du Recorset ou depuis la dernière application d'un filtre.

    Finalement, j'ai fini par trouver une solution :
    • Je mémorise la clé de tri dans une variable de type string
    • J'annule la clé
    • J'applique mon filtre
    • Enfin j'applique la clé de tri que j'ai mémorisé au préalable


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub ApplyFilter(MyFilter As String)
    Dim MemoSort As String
    With RS_CA
        MemoSort = .Sort: .Sort = ""
        .Filter = MyFilter
        .Sort = MemoSort
    End With
    End Sub
    La modification de la clé de tri, à posteriori, ne semble plus de problème, le bug vient bien à l’application du filtre ...

    J'espère que cela pourra aider d'autre personnes

    TALERE

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Et sinon, pourquoi ne pas effectuer filtre + tri dans la requête SQL directement ?

    (je persiste mais bon)
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 54
    Points : 48
    Points
    48
    Par défaut
    Pour la simple et bonne raison que je souhaite pas recharger le jeu d'enregistrement (temps d’exécution un peu long !). De plus étant dans un environnement multi-utilisateurs, je n'ai pas envie que le jeu change car l'utilisateur applique un tri sur une colonne précise.
    -> J'ai un bouton "Recharger" qui me permet de faire cette manipulation, et l'utilisateur sait que, dans ce cas, le nombre et le contenu des enregistrements peut changer.

    Toujours est-il que finalement, le problème n'est pas résolu, j'ai un nouveau bug qui est apparu, mais il semble légèrement différent.

    Prenons l'exemple d'une liste de valeur {5,2,3,9,6,1,7,4,8} (les chiffres de 1 à 9, dans le désordre) et appliquons un filtre sur les valeurs supérieurs à 3. Je dois obtenir la liste {5,9,6,7,4,8} -> Si je filtre par ordre croissant, je devrais la liste {4,5,6,7,8,9} et {9,8,7,6,5,4} par ordre décroissant.
    Voici les effets constatés :
    • Mon premier bug (filtre sur un recordset trié) me donnait {4,5,6} en ordre croissant, et {9,8,7,6} en ordre décroissant. Mon exemple ne tient compte que d'une colonne, mais suivant la colonne trié, les effets étaient complètement différents.
    • Mon nouveau bug (tri sur un recordset filtré), lui, garde le même jeu, mais il est incomplet : {4,5,6} en ordre croissant et {6,5,4} en ordre décroissant. De plus, quelque soit la colonne de tri, le jeu ne semble pas changer.

    Je ne sais pas si c'est lié, mais mais mon recordset filtré et trié contient exactement 200 enregistrements (pour 464 à l'origine) .. je me demande s'il n'y a pas un paramètre initialisé à 200 quelques part ... je cherche ...

    Je vous tiendrais au courant dès que j'aurais trouvé la solution ...

    TALERE

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 54
    Points : 48
    Points
    48
    Par défaut
    Finalement, je désactive systématiquement le filtre ... bizarrement, ça fonctionne si le tri est effectué dans un 2ème temps par l'utilisateur ...

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Ceci est parfaitement normal. En effet entre une base de données qui gère des collations et accepte les NULL et fonctionne de manière ensembliste et un code client qui ne sait ni gérer l'un ni gérer l'autre et fonctionne de manière itérative, il est impossible de reproduire le comportement d'une requête côté client (défaut d'impédance)

    Soit vous abandonnez cette idée saugrenue de singer le SQL par des itérations coté client. Soit vous vous passez d'une base de données relationnelle et par exemple vous revenez au bon vieux temps des fichiers et du CoBOL....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    De plus étant dans un environnement multi-utilisateurs, je n'ai pas envie que le jeu change car l'utilisateur applique un tri sur une colonne précise.
    N'importe quoi! les requêtes sont indépendante d'un utilisateur à un autres.

    Commencez par vous former à l'accès aux données/base de données!

    Vous parlez de performances mais elles seront bien meilleur en triant et filtrant au préalable qu'en le faisant en mémoire!

    Il est simple d'implémenter une pagination côté sql server par exemple.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Discussions similaires

  1. Tableau avec tri, filtre et pagination avec entete et pied fixe
    Par Pelote2012 dans le forum Contribuez
    Réponses: 1
    Dernier message: 18/12/2016, 18h06
  2. [XL-2003] Liste déroulante avec filtre et tri sans doublon
    Par mandrake57 dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 18/03/2011, 08h07
  3. [XL-2003] Userform avec filtre ou tri
    Par tinet dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/02/2011, 15h01
  4. [ZF 1.10] Mémorisation formulaire de filtre et de tri avec pagination
    Par ilalaina dans le forum Zend_Form
    Réponses: 1
    Dernier message: 24/06/2010, 10h23
  5. [Performances]Filtre et tri en relation avec DB
    Par stoukou dans le forum Général Java
    Réponses: 6
    Dernier message: 19/09/2005, 11h46

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