none
BDD ACCESS et pagination : LIMIT de MySql... RRS feed

  • Question

  • Salut à tous,

    voilà le problème, j'ai une table tache, je veux afficher le jeu d'enregistrement de cette table, mais je veux en afficher que 5 par page, j'ai donc besoin d'utiliser une pagination.

    le problème n'est pas de créer la pagination, mais de faire la requête, étant donné que la requête doit être du genre :

    (requête MySql)
    Select * From tache
    Order By 1 Limit Taille, Debut

    en ayant Taille = 5
    ert début étant changeant selon la page sur laquelle nous serons
    Début = 0 si page 1,
    Début = 5 si page 2 etc...

    J'ai vu qu'il existe un attribut TOP qui permet de lire les 5 premiers enregistrements, j'ai également vu des requêtes censées pouvoir remplacer des LIMIT, mais pour du Sql server, et je n'ai pas réussi à les faire aller sous access.

    Auriez vous la solution???

    merci d'avance
    mercredi 17 septembre 2008 09:51

Réponses

  • Bonjour,

     

    Exemple et explication :

     

    Table :

    A

    B

    C

    D

    E

    F

    G

    -> 7 lignes

     

    On souhaite récupérer une page de la ligne 4 à 6 :

    D'abord sélectionner les premiers enregistrement allant de 1 à 3 :

     

    Code Snippet
    SELECT TOP 3 IdentifiantUnique FROM Table WHERE <condition> ORDER BY <tri>

     

     

     

    Ensuite on sélectionne toutes les lignes de la table, en supprimant les précédents sélectionnés (reste donc les lignes allant de 4 à 7. Et on récupère que les 2 premières ligne de la requête (reste donc les lignes 4 à 6). La requête finale est la suivante :

     

    Code Snippet

    SELECT TOP 2 FROM Table WHERE IdentifiantUnique NOT IN (

    SELECT TOP 3 IdentifiantUnique FROM Table WHERE  ORDER BY 

    )

    WHERE

    ORDER BY

     

     

     

    Plus générale, sélectionner une page entre a et b revient à :

     

    Code Snippet

    SELECT TOP b - a FROM Table WHERE IdentifiantUnique NOT IN (

    SELECT TOP a - 1 IdentifiantUnique FROM Table WHERE  ORDER BY  

    )

    WHERE

    ORDER BY 

     

     

     

    Plusieurs choses à noter :

    • La condition du WHERE des 2 requêtes doit être la même !
    • Les colonnes et conditions des GROUP BY/HAVING (s'il existe) doit être la même dans les 2 requêtes.
    • La table doit avoir une clé unique

    Cordialement

    mercredi 17 septembre 2008 11:17
    Modérateur
  • Bonjour,

     

    Non, c'est mois qui bégaye :

     

    Code Snippet

    SELECT TOP b - a FROM Table WHERE IdentifiantUnique NOT IN (

    SELECT TOP a - 1 IdentifiantUnique FROM Table WHERE <condition> ORDER BY <tri>

    )

    AND <condition>

    ORDER BY <tri>

     

     

    Cordialement

    mercredi 17 septembre 2008 13:31
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Exemple et explication :

     

    Table :

    A

    B

    C

    D

    E

    F

    G

    -> 7 lignes

     

    On souhaite récupérer une page de la ligne 4 à 6 :

    D'abord sélectionner les premiers enregistrement allant de 1 à 3 :

     

    Code Snippet
    SELECT TOP 3 IdentifiantUnique FROM Table WHERE <condition> ORDER BY <tri>

     

     

     

    Ensuite on sélectionne toutes les lignes de la table, en supprimant les précédents sélectionnés (reste donc les lignes allant de 4 à 7. Et on récupère que les 2 premières ligne de la requête (reste donc les lignes 4 à 6). La requête finale est la suivante :

     

    Code Snippet

    SELECT TOP 2 FROM Table WHERE IdentifiantUnique NOT IN (

    SELECT TOP 3 IdentifiantUnique FROM Table WHERE  ORDER BY 

    )

    WHERE

    ORDER BY

     

     

     

    Plus générale, sélectionner une page entre a et b revient à :

     

    Code Snippet

    SELECT TOP b - a FROM Table WHERE IdentifiantUnique NOT IN (

    SELECT TOP a - 1 IdentifiantUnique FROM Table WHERE  ORDER BY  

    )

    WHERE

    ORDER BY 

     

     

     

    Plusieurs choses à noter :

    • La condition du WHERE des 2 requêtes doit être la même !
    • Les colonnes et conditions des GROUP BY/HAVING (s'il existe) doit être la même dans les 2 requêtes.
    • La table doit avoir une clé unique

    Cordialement

    mercredi 17 septembre 2008 11:17
    Modérateur
  • Dans cette requête :

    SELECT TOP b - a FROM Table WHERE IdentifiantUnique NOT IN (

    SELECT TOP a - 1 IdentifiantUnique FROM Table WHERE  ORDER BY  

    )

    WHERE

    ORDER BY


    Il y a un where deux fois dans la requête principale. Est-ce normal?

     
    mercredi 17 septembre 2008 12:12
  • Bonjour,

     

    Non, c'est mois qui bégaye :

     

    Code Snippet

    SELECT TOP b - a FROM Table WHERE IdentifiantUnique NOT IN (

    SELECT TOP a - 1 IdentifiantUnique FROM Table WHERE <condition> ORDER BY <tri>

    )

    AND <condition>

    ORDER BY <tri>

     

     

    Cordialement

    mercredi 17 septembre 2008 13:31
    Modérateur
  • Ok, j'ai essayé, mais si je veux afficher les 5 premières, cela ne marche pas.

    En fait, comme je vais faire de la pagination sur cette requête, cela va faire que j'aurai un a et un b comme variable dans ma requête.

    Ensuite, l'autre problème est que je vais mettre cette requête dans un AccessDataSource, cela va être génant, non?
    mercredi 17 septembre 2008 13:33
  • Bonjour,

     

    En fait, comme je vais faire de la pagination sur cette requête, cela va faire que j'aurai un a et un b comme variable dans ma requête.

    Il me semble (c'est à essayer) que les requêtes paramétrées ne fonctionnent pas sous Access pour des variables dans la clause TOP.

     

    Ensuite, l'autre problème est que je vais mettre cette requête dans un AccessDataSource, cela va être génant, non?

    Tout dépend si vous pouvez paramétrer votre requête Access...

     

    Cordialement

     

    vendredi 19 septembre 2008 18:40
    Modérateur