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

VB 6 et antérieur Discussion :

sql limit


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut sql limit
    bonjour
    dans une application j'affiche plusieurs information dans une grilles mais etant donnée que la quantité des information à afficher est tres grande je veut lister mes infos page par page .
    j'etait confronté à la meme situation pour un site web en php mais la clause qu'on peut ajouter dans une requete select facilitai les choses .
    j'ai essayer de faire la meme requette pour interoger ma base de donnee access mais ça ne marche pas .
    est ce que cette clause est prise en charge par le moteur jet d'access ??
    ou est ce ma requette qui est mal formulé ??
    sinon comment faire pour resoudre ce petit probleme ??
    juste un fil pour commencer
    merci

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Si tu parcours un recordSet pour afficher tes données, il te suffit dans ta boucle de gérer un nombre maximum d'enregistrements. Si tu ne procéde pas ainsi, merci de préciser comment tu te connectes à ta BDD (et quel SGBD ?), comment tu lis tes infos et dans quoi tu les affiche ?

    Sinon, si ta requête fonctionne sur ta base, il n'y a apparement pas de raisons qu'elle ne fonctionne pas sous VB ? Pense également à la tracer pour vérifier que la syntaxe est correcte

  3. #3
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    ma requette est correcte à 100% (du moin qd je l'ai executé dans la bd mysql )
    j'affiche mes données dans une listview depuis un ado.recordset connecté à ma bd access .
    je veut une methode optimisée pour extraire les indormation page par page :
    j'utilise une fonction à la kelle je donne ma requette sql et ma listview
    dans la fonction j'ouvre un recordset readonly , forwardonly (donc pas de possiblité de connaitre le nbr de lignes ) le recordset reste le temps que le remplissage de la listview s'effectue puis je la ferme .
    si c pas possible avec ça je peut abondonner ma methode

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par nsanabi
    j'ouvre un recordset readonly , forwardonly (donc pas de possiblité de connaitre le nbr de lignes )
    Et la propriété RecordCount, as-tu essayé de l'utiliser ?
    Attention, il faut faire un MoveNext ou un MoveLast avant !

    Et tu ne veux pas nous mettre le code de remplissage de ta listView ? Si c'est une boucle, compte les enregistrements que tu insères et gère ton nombre maximum via la boucle

    Ex de code (de tête, j'ai pas VB6 ici ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NbLignes = 0
     
    Do until monRecordset.EOF or NbLignes = 300 
        maListView.AddItem ...
        NbLignes = NbLignes + 1
        monRecordset.MoveNext
    Loop

  5. #5
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    ma listview affiche une liste de produit selon plusieurs criteres :
    *tout les produit
    *les produits en rupture de stoques
    *selon la categorie du produit choisie
    *...
    apres ecriture de ma requettes sql je la donne en parametre à ma fonction qui à son tour va remplir la listview passé en 2eme parametre
    le probleme est que ma liste est trops longue (l'actualisation de celle-ci apres mise à jour ou suppression d'un produit par ex est tres lente )
    si je pouvais apporter une modification à ma fonction en lui donnant comme 3eme parametre la page que je veut afficher.(s'il y en a plusieur )

    je peut arreter ma boucle à 40 lignes maximum mais comment faire pour passer d'une page à l'autre ?(je signale que ma recordset n'est la que le temps du remplissage de ma liste )

  6. #6
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    merci pour votre aide je pense avoir trouver la solution
    avec les propriétés pagesize , absolutepage et pagecount de l'objet recordset

  7. #7
    Membre averti Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Points : 392
    Points
    392
    Par défaut
    sinon au lieu de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select limit 100 from matable
    essaye ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select top 100 from matable
    C'est la meme fonction mais certaines base de données ne connaissent que l'une ou l'autre

  8. #8
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    merci mais le probleme est comment avoir a avoir les 100 ligbes qui suivent

  9. #9
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Je viens de faire un travail pareil, à l'aide d'un code sql (que j'ai trouvé sur les faqs) qui permet de simuler la fonction limit de myssql sous sql server !

    Voici le code que tu pourras adapter
    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
    Private Sub Form_Load()
    nbLigne = 100 ' Nombre de lignes à afficher par lot
    numFin = nbLigne
        rsListView = " SELECT * FROM (" & _
                     " SELECT TOP " & nbLigne & " NumVehicule as Vehicule,Immatriculation, Depot as Dépôt, TypeVehicule as 'Type véhicule',NumChassis as 'Numéro chassis', NomPArc as 'Parc' FROM  ( " & _
                     " SELECT TOP " & numFin & " NumVehicule,Immatriculation, T_Depot.Depot, T_TypeVehicule.TypeVehicule,NumChassis, NomPArc FROM T_Vehicule,T_Depot,T_TypeVehicule,T_Parc " & _
                     "  WHERE T_Vehicule.idTypeVehicule = T_TypeVehicule.idTypeVehicule and T_Vehicule.idDepot = T_Depot.idDepot AND T_Parc.idParc = T_Vehicule.idParc  " & strFiltre & " " & _
                     " ORDER BY NumVehicule ASC " & _
                     " ) AS tbl1 ORDER BY NumVehicule DESC " & _
                     " ) AS tbl2 ORDER BY Vehicule DESC "
         If OuvertureConnexion(objConnexion, chConnexion) Then
             FormaterListView objConnexion, rsListView, lstVehicule
             FermetureConnexion objConnexion
         End If
    End Sub
    -----
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub cmdDebut_Click()
      If numFin > nbLigne Then
        numFin = nbLigne
        AfficherLot nbLigne, numFin
      End If
    End Sub
    -----
    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
    Private Sub cmdPrecedent_Click()
    Dim nbTotal As Integer
    Dim sqlSelect As String
    Dim nbLigneLocal As Integer
     
      sqlSelect = "SELECT COUNT(*)  FROM  T_Vehicule " & strFiltre
      If OuvertureConnexion(objConnexion, chConnexion) Then
           nbTotal = NbrRecord(objConnexion, sqlSelect)
      End If
     
      If numFin > nbLigne Then
         numFin = numFin - nbLigne
         If numFin > nbTotal Then
            nbLigneLocal = nbTotal Mod nbLigne
         Else
            nbLigneLocal = nbLigne
         End If
         AfficherLot nbLigneLocal, numFin
    End If
    End Sub
    ----
    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
    Private Sub cmdSuivant_Click()
    Dim sqlSelect As String
    Dim nbTotal As Integer
    Dim nbLigneLocal As Integer
     
      sqlSelect = "SELECT COUNT(*) FROM  T_Vehicule " & strFiltre
     
      If OuvertureConnexion(objConnexion, chConnexion) Then
           nbTotal = NbrRecord(objConnexion, sqlSelect)
      End If
     
     If numFin < nbTotal Then
         numFin = numFin + nbLigne
         If numFin > nbTotal Then
            nbLigneLocal = nbTotal Mod nbLigne
         Else
            nbLigneLocal = nbLigne
         End If
         AfficherLot nbLigneLocal, numFin
     End If
     
    End Sub
    ----
    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
    Private Sub cmdDernier_Click()
    Dim nbTotal As Integer
    Dim sqlSelect As String
    Dim nbLigneLocal As Integer
     
      sqlSelect = "SELECT COUNT(*)  FROM  T_Vehicule " & strFiltre
      If OuvertureConnexion(objConnexion, chConnexion) Then
           nbTotal = NbrRecord(objConnexion, sqlSelect)
      End If
      If numFin < nbTotal Then
        If nbTotal Mod nbLigne <> 0 Then
         nbLigneLocal = nbTotal Mod nbLigne
         numFin = (nbTotal \ nbLigne) * 100 + nbLigne
        Else
         nbLigneLocal = nbLigne
         numFin = nbTotal
        End If
        AfficherLot nbLigneLocal, numFin
     End If
    End Sub
    ----
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub AfficherLot(ByVal Ligne As Integer, ByVal Fin As Integer)
        rsListView = " SELECT * FROM (" & _
                     " SELECT TOP " & nbLigne & " NumVehicule as Vehicule,Immatriculation, Depot as Dépôt, TypeVehicule as 'Type véhicule',NumChassis as 'Numéro chassis', NomPArc as 'Parc' FROM  ( " & _
                     " SELECT TOP " & numFin & " NumVehicule,Immatriculation, T_Depot.Depot, T_TypeVehicule.TypeVehicule,NumChassis, NomPArc FROM T_Vehicule,T_Depot,T_TypeVehicule,T_Parc " & _
                     "  WHERE T_Vehicule.idTypeVehicule = T_TypeVehicule.idTypeVehicule and T_Vehicule.idDepot = T_Depot.idDepot AND T_Parc.idParc = T_Vehicule.idParc  " & strFiltre & " " & _
                     " ORDER BY NumVehicule ASC " & _
                     " ) AS tbl1 ORDER BY NumVehicule DESC " & _
                     " ) AS tbl2 ORDER BY Vehicule DESC "
             If OuvertureConnexion(objConnexion, chConnexion) Then
                 FormaterListView objConnexion, rsListView, lstVehicule
                FermetureConnexion objConnexion
             End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PL/SQL] Limitation UTL_FILE
    Par diazpi dans le forum Oracle
    Réponses: 4
    Dernier message: 03/03/2006, 19h03
  2. [sql]Limiter le nombre de résultats
    Par Mimo dans le forum Oracle
    Réponses: 3
    Dernier message: 31/01/2006, 15h53
  3. [SQL] Limiter la saisie dans une table
    Par dolphi dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/09/2005, 11h43
  4. SQL limit
    Par anzize dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2005, 19h18
  5. fonction sql "LIMIT" en interbase?
    Par GMI dans le forum InterBase
    Réponses: 6
    Dernier message: 20/09/2004, 14h04

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