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

WinDev Discussion :

Definir le nombre d'enregistrements à afficher par page


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 124
    Points : 66
    Points
    66
    Par défaut Definir le nombre d'enregistrements à afficher par page
    Bonjour,
    Après mes recherches infructueuses, je n'ai que seul recours présenter mes soucis sur le forum.
    J'ai une table remplie à partir d'une requête qui par programmation qui m'affiche le nombre d'enregistrement.
    Mes objectifs sont:
    • [1]limiter soit à 25 le nombre d'enregistrement et ainsi avoir des boutons de navigation (page suivante et page précédente).
      [2]pouvoir choisir plus simplement la page à imprimer
      [3]pouvoir aussi choisir la page à exporter

    Merci

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    tu crées une table (table25) qui a la même structure que ta table issue de la requête (tabreq). La table tabreq est cachée (mise en dehors de la fenêtre).
    Ensuite, tu remplis cette table avec tes boutons suivant / précédent en copiant la portion de la table tabreq, en te positionnant sur les bonnes portions.
    Pour l'état, tu te bases sur la table table25.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2014
    Messages : 21
    Points : 69
    Points
    69
    Par défaut
    Salut,

    Comme ça rapidement, je verrais bien une requête SQL avec un LIMIT.
    Le LIMIT OFFSET de la requête est définit selon une variable globale qui est incrémentée ou décrémentée selon le bouton cliqué (page suivante ou page précédente)

    Exemple :
    • La variable globale est initialisée à 1.
    • Tu affiches tes 25 premiers enregistrements.
    • Quand tu vas cliquer sur le bouton page suivante, la variable globale sera incrémentée (valeur 2)
    • Quand tu vas cliquer sur le bouton page précédente, la variable globale sera décrémentée (valeur 1)
    • Selon la valeur de ta variable globale tu vas pouvoir construire ta requête avec le nombre d'enregistrements que tu veux retourner :
      1 = 1 à 25
      2 = 26 à 50
      3 = ....



    Est ce que c'est ce que tu veux ?

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 124
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par RogerCageot Voir le message
    Salut,

    Comme ça rapidement, je verrais bien une requête SQL avec un LIMIT.
    Le LIMIT OFFSET de la requête est définit selon une variable globale qui est incrémentée ou décrémentée selon le bouton cliqué (page suivante ou page précédente)

    Exemple :
    • La variable globale est initialisée à 1.
    • Tu affiches tes 25 premiers enregistrements.
    • Quand tu vas cliquer sur le bouton page suivante, la variable globale sera incrémentée (valeur 2)
    • Quand tu vas cliquer sur le bouton page précédente, la variable globale sera décrémentée (valeur 1)
    • Selon la valeur de ta variable globale tu vas pouvoir construire ta requête avec le nombre d'enregistrements que tu veux retourner :
      1 = 1 à 25
      2 = 26 à 50
      3 = ....



    Est ce que c'est ce que tu veux ?
    OUI ça me convient pour pourvoir afficher à chaque clic 25 suivants ou 25 précédents

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 124
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Bonjour,

    tu crées une table (table25) qui a la même structure que ta table issue de la requête (tabreq). La table tabreq est cachée (mise en dehors de la fenêtre).
    Ensuite, tu remplis cette table avec tes boutons suivant / précédent en copiant la portion de la table tabreq, en te positionnant sur les bonnes portions.
    Pour l'état, tu te bases sur la table table25.
    Bonjour,
    En suivant ce exemple que je trouve plus simple, jai crée une seconde table "tbreq25" qui se rempli par les donne de la table "tbensemble" mais je bute sur une chose:
    Pour afficher mes 25 premiers enregistrements dans ma table tbreq25, Pas de soucis
    Les boutons de navigations (suivant et précédent) qui se positionnent sur l'indice des 25 prochains de la table tbensemblenPas de soucis aussi
    Mais...
    pour afficher les 25 suivants et ainsi de suite dans ma table tbreq25 je n'y arrive pas
    Voici le code que j'ai mis sur le bouton suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TANTQUE IndiceDebut<Indicefin
    TableAjouteLigne(TABLE_tbreq25,TABLE_tbensemblen.COL_1[LIB_Indice],TABLE_tbensemblen.COL_2[LIB_Indice],TABLE_tbensemblen.COL_3[LIB_Indice])
    IndiceDebut=IndiceDebut+1			
    //FIN
    Merci

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Ton code n'est pas complet.
    Tu as des TableAjouteLigne() mais aucun TableSupprimeTout() ou tableSupprimeLigne()Donc à chaque clic, tu as de plus en plus de lignes.
    En plus, tu as une variable lib_indice qui me paraît très bizarre !!

    Il te faut une variable globale que je vais appeler g_offset. Est-ce que tu vois l'intérêt d'une variable GLOBALE par opposition aux Variables Locales ?

    Et le code de ton bouton 'suivant' peut ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    g_offset += 25
     
    lig  lig_debut, lig_fin est un entier 
    lig_debut = g_offset
    lig_fin = g_offset + 24
    si lig_fin >= table_occurrence(TABLE_tbensemblen) alors 
       lig_fin = table_occurrence(TABLE_tbensemblen)
       bt_suivant..etat = grise  
       bt_precedent..etat = actif
    fin
     
    tablesupprimetout(table_tbreq25) 
    pour lig = lig_debut a lig_fin
         tableajouteligne( table_tbreq25 , TABLE_tbensemblen.COL_1[lig],TABLE_tbensemblen.COL_2[lig],TABLE_tbensemblen.COL_3[lig])
    fin
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    pas de seconde table à créer, il suffit

    Dans code Ouverture de l'état
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gnXLigneImprimée est un entier=0
    Dans le code "Avant impression de corps" de l'état
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    gnXLigneImprimée++
    SI gnXLigneImprimée > 25 ALORS
       gnXLigneImprimée=1
       iTerminePage()
    FIN

  8. #8
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par ulovb Voir le message
    Mes objectifs sont:
    • [1]limiter soit à 25 le nombre d'enregistrement et ainsi avoir des boutons de navigation (page suivante et page précédente).
      [2]pouvoir choisir plus simplement la page à imprimer
      [3]pouvoir aussi choisir la page à exporter
    la solution proposée (message #7) répond uniquement aux 2 premiers objectifs. Alors, autre solution.
    I-Dans l'état :
    - description de l'état, volet Données, sélectionner l'option "Seulement les lignes sélectionnées"
    - supprimer le contenu du code Avant impression du corps, s'il existe.

    II-Dans la fenêtre :
    Déclarations globales de la fenêtre : gnTot_Pages,gnIndice1,gnIndice2,gnumPage sont des entiers
    Dans description table, mode de sélection, soit Lignes avec Sélection multiple

    A rajouter des boutons de navigation dans la fenêtre voir image ci-dessous :
    3- champ en saisie, soit "SAI_Page_Encours", Entier
    4- champ en affichage, soit "NbPage", Texte

    Dans le code qui permet de remplir la table, à la fin mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SI TableSelect(MaTable)<>-1 ALORS
         gnTot_Pages=PartieEntière(TableOccurrence(MaTable)/25)
        SI PartieDécimale(TableOccurrence(MaTable)/25)>0 ALORS
            gnTot_Pages+=1
        FIN
     
        NbPage="/"+NumériqueVersChaîne(gnTot_Pages)
        SAI_Page_Encours=1
        pSélectionner_Page()
    FIN
    1- Bouton "1ère Page"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SAI_Page_Encours=1
    pSélectionner_Page()
    2- Bouton "Page précédente"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI SAI_Page_Encours>1 ALORS
         SAI_Page_Encours-=1
         pSélectionner_Page()
    FIN
    3- Code Entrée dans champ SAI_Page_Encours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gnumPage=SAI_Page_Encours
    Code sortie du champ SAI_Page_Encours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SI SAI_Page_Encours=0 OU SAI_Page_Encours>gnTot_Pages ALORS
       SAI_Page_Encours=gnumPage
    FIN
     
    // touche Enter
    SI ToucheEnfoncée(0x0D) ALORS
         pSélectionner_Page()
    FIN
    5- Bouton "Page suivante"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI SAI_Page_Encours<gnTot_Pages ALORS
         SAI_Page_Encours+=1
        pSélectionner_Page()
    FIN
    6- Bouton "Dernière page"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI SAI_Page_Encours<gnTot_Pages ALORS
        SAI_Page_Encours=gnTot_Pages
        pSélectionner_Page()
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    PROCEDURE pSélectionner_Page()
    //SI SAI_Page_Encours=0 ALORS RETOUR
    //SI SAI_Page_Encours>gnTot_Pages ALORS RETOUR
    TableSelectMoins(MaTable)
     
    SELON SAI_Page_Encours
        CAS < gnTot_Pages
                gnIndice2=SAI_Page_Encours*25
                gnIndice1=gnIndice2-25+1
     
               POUR i=gnIndice1 _A_ gnIndice2
                       TableSelectPlus(MaTable,i)
               FIN
     
         CAS = gnTot_Pages
                   gnIndice1=((gnTot_Pages-1)*25)+1
                   gnIndice2=MaTable..Occurrence
     
                   POUR i=gnIndice1 _A_ gnIndice2
    	               TableSelectPlus(MaTable,i)
                   FIN
    FIN
    remarques :
    - pour imprimer une page bien précise, il suffit de saisir son numéro dans le champ SAI_Page_Encours (3), et appuyer sur Enter
    - pour conserver la sélection automatique des lignes de la page, ne pas cliquer dans la table
    - pour faire défiler les lignes, faites-le au moyen de la roulette de la souris, ou cliquer sur l'ascenseur

    Nom : Imprimer25.png
Affichages : 507
Taille : 11,3 Ko

  9. #9
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    avec TablePosition(), les lignes sélectionnées sont remontées, en début de la table, et ça permet d'avoir un visu rapide , sur la page à imprimer
    alors, voici le code Procedure pSélectionner_Page() rectifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    PROCEDURE pSélectionner_Page()
    //SI SAI_Page_Encours=0 ALORS RETOUR
    //SI SAI_Page_Encours > gnTot_Pages ALORS RETOUR
    TableSelectMoins(MaTable)
    
    SELON SAI_Page_Encours
        CAS < gnTot_Pages
                 gnIndice2= SAI_Page_Encours*25
                 gnIndice1=gnIndice2-25+1
                 TablePosition(MaTable,gnIndice1)
          
              POUR i=gnIndice1 _A_ gnIndice2
                            TableSelectPlus(MaTable,i)
                FIN
    
         CAS = gnTot_Pages
                      gnIndice1=((gnTot_Pages-1)*25)+1
                      gnIndice2=MaTable..Occurrence
                      TablePosition(MaTable,gnIndice1)
                 	      
                     POUR i=gnIndice1 _A_ gnIndice2
    	                TableSelectPlus(MaTable,i)
                     FIN
    FIN

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/12/2010, 09h16
  2. Nombre d'élements affichés par page
    Par boheme260 dans le forum Langage
    Réponses: 1
    Dernier message: 31/07/2009, 10h07
  3. [MySQL] Choisir le nombre de résultats à afficher par page
    Par raffa dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/01/2009, 12h53
  4. [FPDF] afficher un nombre défini d'article par page
    Par kluck3000 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 28/05/2008, 12h00

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