Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/07/2004, 09h32   #1
Invité de passage
 
Inscription : avril 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 10
Points : 1
Points : 1
Par défaut selectionner n lignes

Salut

Je voulais savoir comment faire sous IB pour sélectionner par exemple de la ligne 4 à la ligne 10.
Or les fonctions 'limit' et 'top' n'existe pas sous IB.

Cdlt
jimmy2cv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2004, 10h39   #2
rsc
Membre émérite
 
Avatar de rsc
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 699
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 61
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2004
Messages : 699
Points : 874
Points : 874
A vue de nez, j'utiliserais une procédure stockée, avec une boucle et une variable incrémentée, du style :


Code :
1
2
3
4
5
6
FOR SELECT <Ma requete> INTO <Mes valeurs à renvoyer>  DO
BEGIN
  i = i + 1
  IF (i>10) THEN EXIT;
  IF (I>= 4) THEN SUSPEND;
END;
Mais je ne suis pas un pro A tester;

Roland
rsc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2004, 11h50   #3
Invité de passage
 
Inscription : avril 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 10
Points : 1
Points : 1
Merci pour ta réponse

L'inconviénient de cette méthode c'est que je lis tout de même tous les données de la table ce qui est assé volumineux.

Cdlt
jimmy2cv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2004, 13h03   #4
rsc
Membre émérite
 
Avatar de rsc
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 699
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 61
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2004
Messages : 699
Points : 874
Points : 874
Non, du moins si j'ai bien compris la réponse que Barbibulle m'avait donnée.(cf Sujet : "Tester si une table est vide").

Le For... semble ramener la requête ligne par ligne, et le sort de la procédure après la 10ème ligne.

Roland
rsc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2004, 14h18   #5
Invité de passage
 
Inscription : avril 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 10
Points : 1
Points : 1
Aurais-tu un code source de la requête et de son utilisation a m'envoyer car je ne vois pas du tout comment ca pourrais marcher.

Desolé

Cdlt
jimmy2cv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2004, 15h59   #6
rsc
Membre émérite
 
Avatar de rsc
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 699
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 61
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2004
Messages : 699
Points : 874
Points : 874
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE PROCEDURE  EXTRAITLIGNES (Debut INTEGER, Fin INTEGER)
RETURNS (Valeur1 INTEGER,  Valeur2 VARCHAR (10))
 AS
DECLARE VARIABLE i INTEGER;
BEGIN
  i = 0;
  FOR SELECT Champ1, Champ1 FROM MATABLE
         INTO :Valeur1, :Valeur2 DO 
  BEGIN /* Pour chaque ligne de la requête, les valeurs des champs sont   stockées dans les valeurs à retourner*/
    i = i  + 1; /*i prend le n° de la ligne */
    IF i > :Fin THEN EXIT; /* Si mon n° de ligne est supérieur à la limite  passée en entrée, on arrête */
    IF i >= :Debut THEN SUSPEND;/*Sinon, s'il est au moins égal à la limite inférieurs, je renvoie mes deux champs */
  END
END
J'espère ne pas avoir fait (trop) de fautes !

Tu crées ta procédure dans ta base, ensuite, pour l'appeler, comme elle renvoie plusieurs lignes, je crois qu'il faut que tu utilises un composant style TIBQuery, avec une SQL
Code :
EXECUTE PROCEDURE EXTRAITLIGNES 4 10 RETURNING_VALUES Valeur1 Valeur2
(qqs variantes entre SQL, ISQL, etc voir Aide Interbase.

N.B. : As-tu lu le tutoriel "Procédures stockées" (Annonce un plu plus haut dans le forum) ? Il m'a beaucoup aidé

Essaie et tiens-moi au courant

Cordialement

Roland
rsc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2004, 16h07   #7
Invité de passage
 
Inscription : avril 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 10
Points : 1
Points : 1
merci beaucoup je vais tester et adapter au php

Je dirais si ca marche
jimmy2cv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2004, 16h31   #8
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
en firebird 1.5, le next et top existent: FIRST et SKIP, Pex:

donnera les 10 premiers enregistrements:
Code :
SELECT FIRST 10 SKIP 10 champ1, champ2, champ3 FROM TaTable
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h15.


 
 
 
 
Partenaires

Hébergement Web