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

C++Builder Discussion :

Aide vecteur, je sèche


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut Aide vecteur, je sèche
    bonjour à tous,
    voici mon problème, je souhaite créer un tableau de taille correspondante au nombre d'enregistrements trouvés dans ma base de données.

    Seulement impossible d'initialiser la taille de mon tableau !

    Voici mon code :

    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
    	// Déclaration des variables
    	int nbrDate = 0 ;
    	int NbrEnregistrement;
    	// Requête SELECT sur ma tabe dates_tbl
    	Query1->Close();
    	Query1->SQL->Clear() ;
    	Query1->SQL->Add("SELECT id_date,date_calendrier FROM Dates_tbl ");
    	Query1->SQL->Add("WHERE date_calendrier='"+date+"'");
    	Query1->Open();
    	// Récupération du nombre d'enregistrements trouvés
    	NbrEnregistrement = Query1->RecordCount ;
    	// On se place sur le premier enregistrement
    	Query1->First();
    	// Création du vecteur avec comme taille le nombre d'enregistrements trouvés
    	int vectNbrId_date[NbrEnregistrement];
    	// Tant que l'on a pas parcouru tous les enregistrements
    	while(!Query1->Eof){
    		// Je met dans mon vecteur les valeurs de id_date trouvées
    		vectNbrId_date[nbrDate] = Query1->FieldByName("id_date")->AsInteger ;
    		// Je passe à la valeur du tableau suivante
    		nbrDate = nbrDate+1;
    		// Je passe à l'enregistrement suivant
    		Query1->Next();
    	}
    Et voici l'erreur de compilation :
    [BCC32 Erreur] FenPrinc.cpp(1301): E2313 Expression constante nécessaire
    J'ai bien vu ça : http://www.developpez.net/forums/d68...ant-dynamique/
    Mais ça m'a l'air assez compliqué pour pas grand chose...

    Quelqu'un connaitrait-il une astuce pour réaliser ça ?

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Soit tu réalise une requête SQL COUNT() pour connaitre le nombre d'enregistrement, soit tu peux regarder la propriétée RecordCount de ton TQuery.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Tu veux dire ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int vectNbrId_date[Query1->RecordCount];
    J'obtiens la même erreur..

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 413
    Par défaut
    Salut !

    Et en essayant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int *vectNbrId_date = new int[NbrEnregistrement];
    Et dans ce cas, ne pas oublier de libérer le tableau sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete [] vectNbrId_date;
    A plus !

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Je n'ai plus d'erreur mais mon vecteur a toujours une taille de 1,
    à la fin de la boucle j'ai
    vectNbrId_date[0]=126
    avec 126 qui correspond bien à ma première valeur de ma table.

    Bizarre que mon vecteur de change pas de taille :/

    Voici le code :
    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
    	// Déclaration des variables
    	int nbrDate = 0 ;
    	int NbrEnregistrement;
    	// Requête SELECT sur ma tabe dates_tbl
    	Query1->Close();
    	Query1->SQL->Clear() ;
    	Query1->SQL->Add("SELECT id_date,date_calendrier FROM Dates_tbl ");
    	Query1->SQL->Add("WHERE date_calendrier='"+date+"'");
    	Query1->Open();
    	// Récupération du nombre d'enregistrements trouvés
    	NbrEnregistrement = Query1->RecordCount ;
    	// On se place sur le premier enregistrement
    	Query1->First();
    	// Création du vecteur avec comme taille le nombre d'enregistrements trouvés
    	int *vectNbrId_date = new int[NbrEnregistrement];
    	// Tant que l'on a pas parcouru tous les enregistrements
    	while(!Query1->Eof){
    		// Je met dans mon vecteur les valeurs de id_date trouvées
    		vectNbrId_date[nbrDate] = Query1->FieldByName("id_date")->AsInteger ;
    		// Je passe à la valeur du tableau suivante
    		nbrDate = nbrDate+1;
    		// Je passe à l'enregistrement suivant
    		Query1->Next();
    	}
    	delete [] vectNbrId_date;

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Par défaut Création d'un tableau
    Bonjour,
    Il faut vérifier sous debug,ou par écritures de contrôle,la valeur de Query1->RecordCount , à combien le tableau a été dimensionné,combien de fois la boucle while est parcourue.

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    J'ai déjà fais sous débug,

    Query1->RecordCount = 3

    Donc la taille du vecteur doit être de 3 normalement, et pour la boucle While elle est parcourue 3 fois.

    C'est bien ma taille du vecteur qui foire, par exemple si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int vectNbrId_date[Query1->RecordCount];
    => Erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NbrEnregistrement = Query1->RecordCount ;
    int vectNbrId_date[NbrEnregistrement];
    => Erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int vectNbrId_date[10];
    => Ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define NBRENREGISTREMENT 10
    int vectNbrId_date[NBRENREGISTREMENT];
    => Ça marche

    Je peux pas mettre de valeur "variable" en taille de vecteur, du moins c'est ce l'erreur semble me dire..

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

Discussions similaires

  1. aide sur les vecteurs
    Par brf1982 dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/10/2009, 13h49
  2. [AIDE] Problème Vecteur
    Par kikouu dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/01/2008, 17h41
  3. [AIDE] Pb Vecteur
    Par Diablo_22 dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2007, 10h58
  4. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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