OVH Cloud OVH Cloud

Requete SQL

5 réponses
Avatar
patrickrgn
Bonjour

Est-ce que la fonction "limit" permettant de sélectionner qu'une partie des
enregistrement existe et peut-être utiliser avec un OleDbDataReader en
vb.net?

Merci

5 réponses

Avatar
Ambassadeur Kosh
je ne connais pas cette fonction, mais bon, en SQL, TOP 123 selectionne les
123 premiers éléments d'une clause. cela permet de résoudre le probleme
indépendament du client utilisé derriere.

"patrickrgn" a écrit dans le message
de news:
Bonjour

Est-ce que la fonction "limit" permettant de sélectionner qu'une partie
des
enregistrement existe et peut-être utiliser avec un OleDbDataReader en
vb.net?

Merci


Avatar
patrickrgn
Et comment fait-on pour selectionner les élément de 100 à 150?


"Ambassadeur Kosh" a écrit :

je ne connais pas cette fonction, mais bon, en SQL, TOP 123 selectionne les
123 premiers éléments d'une clause. cela permet de résoudre le probleme
indépendament du client utilisé derriere.

"patrickrgn" a écrit dans le message
de news:
> Bonjour
>
> Est-ce que la fonction "limit" permettant de sélectionner qu'une partie
> des
> enregistrement existe et peut-être utiliser avec un OleDbDataReader en
> vb.net?
>
> Merci





Avatar
Ambassadeur Kosh
ben on fait TOP 150, et on balance les 100 premiers au reader.
c'est moins lourd que de faire un SELECT de la totalité et de compter
ensuite avec le reader.

si c'est pour faire de la page qui affiche les enregistrements par paquets
de N, c'est pas la bonne façon de faire.

et sinon, quel interet ça a de selectionner ce genre de choses ? d'habitude,
le critere de selection porte plutot sur une propriété ou une qualité des
objets, pas sur une position (qui plus est peu être aléatoire sans un ORDER
BY)...



"patrickrgn" a écrit dans le message
de news:
Et comment fait-on pour selectionner les élément de 100 à 150?


"Ambassadeur Kosh" a écrit :

je ne connais pas cette fonction, mais bon, en SQL, TOP 123 selectionne
les
123 premiers éléments d'une clause. cela permet de résoudre le probleme
indépendament du client utilisé derriere.

"patrickrgn" a écrit dans le
message
de news:
> Bonjour
>
> Est-ce que la fonction "limit" permettant de sélectionner qu'une partie
> des
> enregistrement existe et peut-être utiliser avec un OleDbDataReader en
> vb.net?
>
> Merci







Avatar
patrickrgn
Justement, je veux m'en servir pour un système de page pour un datagridview.
Sachant que la requete est assez lourde avec des recherches dans plusieurs
tables et que le nombre d'enregistrmentqui en ressort peut dépasser les
10000, le temps de chargement peut devenir long.
Mais j'ai peut-être trouvé un solution qui n'est pas parfaite mais bon...
En fait lors du premier affichage, je stocke dans un premier temps tous mes
enregistrements dans un tableau déclaré en public puis j'affiche avec une
boucle for les lignes dont j'ai besoin (ex de 150 à 200). Quant on change de
page, il n'y a plus besoin de refaire la requete mais simplement de lire les
infos stockées dans le tableau toujours avec la boucle for.

Mais ça serait plus simple avec LIMIT 150, 200 en sql

"Ambassadeur Kosh" a écrit :

ben on fait TOP 150, et on balance les 100 premiers au reader.
c'est moins lourd que de faire un SELECT de la totalité et de compter
ensuite avec le reader.

si c'est pour faire de la page qui affiche les enregistrements par paquets
de N, c'est pas la bonne façon de faire.

et sinon, quel interet ça a de selectionner ce genre de choses ? d'habitude,
le critere de selection porte plutot sur une propriété ou une qualité des
objets, pas sur une position (qui plus est peu être aléatoire sans un ORDER
BY)...



"patrickrgn" a écrit dans le message
de news:
> Et comment fait-on pour selectionner les élément de 100 à 150?
>
>
> "Ambassadeur Kosh" a écrit :
>
>> je ne connais pas cette fonction, mais bon, en SQL, TOP 123 selectionne
>> les
>> 123 premiers éléments d'une clause. cela permet de résoudre le probleme
>> indépendament du client utilisé derriere.
>>
>> "patrickrgn" a écrit dans le
>> message
>> de news:
>> > Bonjour
>> >
>> > Est-ce que la fonction "limit" permettant de sélectionner qu'une partie
>> > des
>> > enregistrement existe et peut-être utiliser avec un OleDbDataReader en
>> > vb.net?
>> >
>> > Merci
>>
>>
>>





Avatar
Ambassadeur Kosh
pour moi, ce mécanisme LIMIT x,y n'est pas adapté.
entre la production de deux pages, ta table a bougé (nouvelles lignes,
lignes supprimées).
ces entiers x et y ne représentent rien de stable, et de fiable.

une façon AMHA plus compliant de faire est un SELECT id FROM table WHERE
criteria, et la, tu recuperes 10000 ids.
résultat que tu gardes au chaud dans ton viewstate, et que tu utilises
ensuite pour construire tes pages à l'aide de SELECT field1 , field2... FROM
table WHERE id = @id.

pour les données qui disparaissent en route, faut choisir entre une
représentation visuelle de "n'existe plus" ou une suppression dans la liste
des id.
pour les données qui apparaissent en route, faut voir. les faire apparaitre
revient à dire "naviguer = updater". moi je dirais "on fait pas"
pour le contenu qui change, ben on peut pas avoir le beurre et l'argent du
beurre.

et sinon, une requete qui ramene 100000 lignes regroupées par 50 dans des
pages, culturellement, en mode deconnecté, ça se fait pas trop, vois tu.


"patrickrgn" a écrit dans le message
de news:
Justement, je veux m'en servir pour un système de page pour un
datagridview.
Sachant que la requete est assez lourde avec des recherches dans plusieurs
tables et que le nombre d'enregistrmentqui en ressort peut dépasser les
10000, le temps de chargement peut devenir long.
Mais j'ai peut-être trouvé un solution qui n'est pas parfaite mais bon...
En fait lors du premier affichage, je stocke dans un premier temps tous
mes
enregistrements dans un tableau déclaré en public puis j'affiche avec une
boucle for les lignes dont j'ai besoin (ex de 150 à 200). Quant on change
de
page, il n'y a plus besoin de refaire la requete mais simplement de lire
les
infos stockées dans le tableau toujours avec la boucle for.

Mais ça serait plus simple avec LIMIT 150, 200 en sql

"Ambassadeur Kosh" a écrit :

ben on fait TOP 150, et on balance les 100 premiers au reader.
c'est moins lourd que de faire un SELECT de la totalité et de compter
ensuite avec le reader.

si c'est pour faire de la page qui affiche les enregistrements par
paquets
de N, c'est pas la bonne façon de faire.

et sinon, quel interet ça a de selectionner ce genre de choses ?
d'habitude,
le critere de selection porte plutot sur une propriété ou une qualité des
objets, pas sur une position (qui plus est peu être aléatoire sans un
ORDER
BY)...



"patrickrgn" a écrit dans le
message
de news:
> Et comment fait-on pour selectionner les élément de 100 à 150?
>
>
> "Ambassadeur Kosh" a écrit :
>
>> je ne connais pas cette fonction, mais bon, en SQL, TOP 123
>> selectionne
>> les
>> 123 premiers éléments d'une clause. cela permet de résoudre le
>> probleme
>> indépendament du client utilisé derriere.
>>
>> "patrickrgn" a écrit dans le
>> message
>> de news:
>> > Bonjour
>> >
>> > Est-ce que la fonction "limit" permettant de sélectionner qu'une
>> > partie
>> > des
>> > enregistrement existe et peut-être utiliser avec un OleDbDataReader
>> > en
>> > vb.net?
>> >
>> > Merci
>>
>>
>>