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

WebDev Discussion :

WEBDEV : ZoneRepétée affiche un seul enregistrement (le premier)


Sujet :

WebDev

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut WEBDEV : ZoneRepétée affiche un seul enregistrement (le premier)
    Bonjour,
    J'ai une zone répétée remplir avec une requête SQL. Le problème c'est qu'il n'y a qu'un seul enregistrement qui s'affiche alors que j'ai deux enregistrement dans la base qui satisfont aux critères de ma requête.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    // Vide la zone répétée
    ZoneRépétéeSupprimeTout(ZR_Recherche)
     
    //Remplir les zone repétées
    exeReq est un booléen	= SQLExec("SELECT * FROM produit WHERE archive = "+0, "SQL1")
     
    SI exeReq ALORS
    	TANTQUE SQLAvance("SQL1") = 0
    		SQLPremier("SQL1")
     
    		//Affectation des valeurs
    		idProd		= SQLCol("SQL1", 1)
    		libelleProd	= SQLCol("SQL1", 3)
    		ref			= SQLCol("SQL1", 2)
    		idFamille	= SQLCol("SQL1", 9)
    		photo		= SQLCol("SQL1", 4)
    		prixAchat	= SQLCol("SQL1", 5)
    		prixVente	= SQLCol("SQL1", 6)
    		familleProduit	= RechercheFamille(idFamille)
     
    		// Ajoute le produit dans la zone répétée
    		ZoneRépétéeAjouteLigne(ZR_Recherche)
     
    		i = ZoneRépétéeOccurrence(ZR_Recherche, toTotal)
     
    		// On renseigne les attributs de la zone répétée	
    		ATT_Nom[i]							= libelleProd
    		ATT_Image[i]						= photo
    		ATT_ID[i]							= idProd
    		ATT_IDFamille[i]					= idFamille
    		ATT_Référence[i]					= ref
    		ATT_Prix_Achat[i]					= prixAchat
    		ATT_Prix_Vente[i]					= prixVente
    		ATT_Famille[i]						= familleProduit
     
    		SQLSuivant("SQL1")
    	FIN
    SINON
    	Info("Le fichier est vide")
    FIN
     
    SQLFerme("SQL1")

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 371
    Par défaut
    Bonjour,
    Tu mélanges deux types de parcours: c'est soit SqlPremier()/Sqlsuivant(), soit Sqlavance().
    Regardes pour plus d'infos.

    Tatayo

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    Merci,
    j'ai apporté la correction, la zone est répétée deux fois mais dans les données la base de données :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SI exeReq ALORS
    	TANTQUE SQLAvance("SQL1") = 0
     
    		//Affectation des valeurs
    		idProd		= SQLCol("SQL1", 1)
    		libelleProd	= SQLCol("SQL1", 3)
    		ref			= SQLCol("SQL1", 2)
    		idFamille	= SQLCol("SQL1", 9)
    		photo		= SQLCol("SQL1", 4)
    		prixAchat	= SQLCol("SQL1", 5)
    		prixVente	= SQLCol("SQL1", 6)
    		familleProduit	= RechercheFamille(idFamille)
     
    		// Ajoute le produit dans la zone répétée
    		ZoneRépétéeAjouteLigne(ZR_Recherche)
     
    		i = ZoneRépétéeOccurrence(ZR_Recherche, toTotal)
     
    		// On renseigne les attributs de la zone répétée	
    		ATT_Nom[i]							= libelleProd
    		ATT_Image[i]						= photo
    		ATT_ID[i]							= idProd
    		ATT_IDFamille[i]					= idFamille
    		ATT_Référence[i]					= ref
    		ATT_Prix_Achat[i]					= prixAchat
    		ATT_Prix_Vente[i]					= prixVente
    		ATT_Famille[i]						= familleProduit
     
    	FIN
    SINON
    	Info("Le fichier est vide")
    FIN
     
    SQLFerme("SQL1")

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 371
    Par défaut
    Tu n'as pas lu l'aide en ligne...
    La réponse est .

    Tatayo.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    C'est bon. pour afficher les données.

    Merci tatayo

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    Bonjour,
    Je réouvre la discussion parce que j'ai ma zone répétée affiche seulement les deux première ligne de mon fichier.
    Pourtant, quand j'affiche la réponse de ma requête toutes les information sont visible.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    reqProduit									est un booléen
     
    //Remplir les zone repétées
    reqProduit	= SQLExec("SELECT * FROM produit", "SQL1")
     
    // Vide la zone répétée
    ZoneRépétéeSupprimeTout(ZR_Catalogue)
     
    SI reqProduit ALORS
    	TANTQUE SQLAvance("SQL1") = 0
     
     
    		// Ajoute le produit dans la zone répétée
    		ZoneRépétéeAjouteLigne(ZR_Catalogue)
     
    		i = ZoneRépétéeOccurrence(ZR_Catalogue, toTotal)
     
    		//		// On renseigne les attributs de la zone répétée	
    		ATT_ID[i]							= SQLLitCol ("SQL1", 1)
    		ATT_Référence[i]					= SQLLitCol ("SQL1", 2)
    		ATT_LIBELLE[i]						= SQLLitCol ("SQL1", 3)
    		ATT_Image[i]						= fRepEnCours() + SQLLitCol("SQL1", 4) 
    		ATT_Prix_Achat[i]					= SQLLitCol ("SQL1", 5)
    		ATT_Prix_Vente[i]					= SQLLitCol ("SQL1", 6)
    		ATT_IDFamille[i]					= SQLLitCol ("SQL1", 8)
     
    	FIN
     
    SINON
    	Info("il n'y a aucun produit.")
    FIN
     
    SQLFerme("SQL1")

  7. #7
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 523
    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 523
    Par défaut
    bonjour,

    Si tu réouvres ce sujet, alors supprime le tag résolu...

    Pour répondre (et surtout, reprendre) ton code :
    - ReqProduit est mal utilisé, voire on peut s'en passer / ne sert à rien (comme tu as écrit ton code)
    - Tu ne vérifies pas l'exécution de ta requête (cf point au-dessus)
    - Tu utilises mal le ZoneRépétéeAjouteLigne
    - Le ZoneRépétéeOccurrence est mal utilisé (cf point au-dessus)

    Ensuite, tu peux simplement mettre un info(i) à la fin de ton code pour savoir combien d'enregistrements ont été lus

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 371
    Par défaut
    J'ajouterai qu'utiliser SELECT * dans une requête est une très mauvaise idée.
    Le jour où la structure du fichier produit change, ton code ne fonctionne plus.
    Il FAUT systématiquement spécifier la liste des rubriques que la requête doit renvoyer.

    Et si tu veux comprendre ce qu'il se passe, tu peux poser un point d'arrêt sur la première ligne du code, puis avancer pas à pas.
    Tu peux même surveiller la valeur de tes variables, le contenu de la zone répétée...
    Windev propose un bon débuggeur, pourquoi ne pas l'utiliser ?

    Tatayo.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    979
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 979
    Par défaut
    Bonsoir
    Citation Envoyé par tatayo Voir le message
    J'ajouterai qu'utiliser SELECT * dans une requête est une très mauvaise idée.
    Le jour où la structure du fichier produit change, ton code ne fonctionne plus.
    Je ne comprends pas pourquoi. Bien que c'est mieux spécifier les rubriques, * donne toutes les rubriques même si la structure change.

  10. #10
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 371
    Par défaut
    Oui, mais rien ne garantit l'ordre d'arrivée de ces rubriques.
    Donc tu peux avoir un décalage, qui va conduire à un résultat faux.

    Tatayo.

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    979
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 979
    Par défaut
    Merci beaucoup.

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

Discussions similaires

  1. [XL-2016] Problme avec opérateur OR
    Par Superpat9999 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/07/2020, 13h57
  2. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  3. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  4. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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