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 :

Soucis avec une BDD paradox...


Sujet :

C++Builder

  1. #21
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    La c'est normal...
    Tel que tu le fais, tu essaies de tester une liste qui est vide...
    La TStringList doit être créee (une seule fois) avant que l'utilisateur réponde
    aux questions; au moment des réponses, ou du passage automatique a une autre question, tu dois renseigner la liste (Liste->Add(...)).
    Ensuite tu testes les éléménts dans la liste pour valider les réponses.
    Une fois que tout est terminer, vider la liste...

  2. #22
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    Okay j'ai pigé, pour moi elle était déclarée mais pas correctement...

    Bref, là le pb qui se pose, c'est qu'il ne veut pas prendre en compte le nom de mon champ :s
    explication :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test->DataSource1->DataSet->Filter = AnsiString("Mot Français = '") + Liste->Names[i] + ("'");
    Il me dit que 'Mot' est introuvable dans la table, ou bien si je met "MotFrançais", il dit à ce moment là que 'MotFran' est introuvable aussi :s... l'est chiant ce truc la, jlui dde pas le bout du monde .
    DataSource1 pointe bien vers ma table, de ce coté là aucun soucis :s, ne prendrait-il qu'un nombre limité de caractères pour les nom de champ ??

  3. #23
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    As tu essayé en restant 'simple' sur le nom de champ...style:
    Mot_francais
    ?
    (pas de caractères un peu 'spéciaux')

  4. #24
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    Euhhhhhh, je veux bien essayer avec cela, il prend effectivement en compte le truc entier mais cela suppose que je refasse toute mes DBGrid, ainsi que ma base de données :p...

    Je veux bien essayé si cela peut fonctionner, que je n'ai pas fait d'autre erreur dans le code que tu m'as gentillement soufflé

  5. #25
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    je refasse toute mes DBGrid, ainsi que ma base de données
    Hé bien oui, dans ce cas tu dois faire un changement sur la table concernée mais qu'entends tu par 'tous mes DBGrids' ? (pour chaque colonne d'une DBGrid, tu as - dans l'inspecteur d'objects - la possibilité de spécifier 'Title -> Caption', ce faisant, c'est ce qui apparaitra quel que soit le nom 'réel' du champ...sommes nous d'accord ?)
    Bon moi, je veux pas te rajouter tu taf en plus...mais bon..des fois faut tester

  6. #26
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    Bon alors effectivement ce fameux problème de nom de champ est corrigé ! chui un boulet je ne n'avais pas vu que la DBGrid avait un event Title->Caption, j'en était resté à l'event FieldDef... bref

    Mais j'en ai un autre !

    Toujours celui de "List index out of bounds(0)", mais cette fois le 0 est passé a 1 :s...
    Va comprendre quelque chose


    chu en train de penser que l'on se fait un topic à deux :p... PrIvAte ToPiC

  7. #27
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    C'est surement la 'borne supérieure' de ta boucle...
    Il faut qqchose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = 0; i < Liste->Count; i ++)
    {
     
    }
    @+

  8. #28
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    Bon je reviens pour de nouveau pbs !

    Je commence a désepérer, j'ai mis un timer pour que le tirage aléatoire des mots s'exécute toutes les X secondes. Jusqu'à hier cela fonctionnait très bien ! aujourd'hui plus rien ! j'ai beau essayé tout un tas de truc veut rien savoir.
    Ce qui se passe c'est lorsque je lance le tirage, le premier mot est afficher pdt le tps du timer (1sec ici) et hop après plus rien ! Le timer n'exécute même pas son 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    void __fastcall Ttest2::boutontirageClick(TObject *Sender)
    {
    if(test->choixauto->Checked==true)     //tirage automatique
    {
            int u;
     
            if(test->choix10->Checked==true)
                    u=10;
     
            if(test->choix20->Checked==true)
                    u=20;
     
            if(test->choix30->Checked==true)
                    u=30;
     
            if(test->choixperso->Checked==true)
                    u=StrToInt(test->Edit1->Text);
            u=2;
            boutontirage->Enabled=false;
            while(u!=0)                                     //boucle pour effectuer le tirage n fois
            {
                   u--;
                   Timer1->Enabled=true;             //appel du timer
            };
    };
     
    if(test->choixmanu->Checked==true)
            Timer1->Enabled=false;
     
    randomize();
    if(test->RadioButton1->Checked==true)
    {
            Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
    nomfield="Mot_Français";
    };
     
    if(test->RadioButton2->Checked==true)
    {
            Edit1->Text=test->Table->FieldByName("Mot_Anglais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }while(test->Table->FieldByName("Mot_Anglais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
    nomfield="Mot_Anglais";
    };
     
    if(test->RadioButton3->Checked==true)
    {
            Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
    };
     
    Edit2->Text="";
    }
    //---------------------------------------------------------------------------
     
    void __fastcall Ttest2::Timer1Timer(TObject *Sender)
    {
     
    randomize();
     
    if(test->RadioButton1->Checked==true)
    {
            Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }
            while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
            nomfield="Mot_Francais";
    };
     
    if(test->RadioButton2->Checked==true)
    {
            Edit1->Text=test->Table->FieldByName("Mot_Anglais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }
            while(test->Table->FieldByName("Mot_Anglais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
            nomfield="Mot_Anglais";
    };
     
    if(test->RadioButton3->Checked==true)
    {
            Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }
            while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
    };
     
    Liste->Add(test->Table->FieldByName("Mot_Francais")->AsString + AnsiString("=") + Edit1->Text);
     
    Edit2->Text="";
    Edit1->Text="";
     
    }
    bon donc je lui demande d'exécuter la boucle de tirage un certain nombre de fois définie par l'utilisateur 10, 20, 30 fois ou personnalisé.
    Hier je n'avais pas ça ! j'avais juste une boucle do while dans le timer qui m'exécutait le code un nombre de fois limité que j'avais défini et miraculeusement ça fonctionnait ! Aujourd'hui plus rien :s
    Pour la boucle de tirage, j'ai essayé avec un do while mais c'est pareil, j'ai enlever les if pour les nbs de tirage, c'est pareil, bref rien ne fonctionne, sa me soul, sa fait 3h que je suis dessus :s

    Si une ame charitable pouvait me filer un coup de main parce que je désèspère et mon projet est à rendre bientot...

  9. #29
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Première réaction vite fait, comme ça:
    .d'ou viens cette profusion de " ; " un peu partout dans le code ?
    Etait ce vraimment nécéssaire ?
    . ne peut on pas imaginer qu'une variable (déclarée en private) représente le type de traitement qu'a choisi l'utilisateur, plutôt que de tester si tel ou tel RadioButton a été coché ?
    Ainsi, tu pourrais avoir une variable :
    affectée par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TaForm::TRadioButton1Click(TObject *Sender)
    {
    Mode = 'A'; //choix anglais
    }
    //
    void __fastcall TaForm::TRadioButton2Click(TObject *Sender)
    {
    Mode = 'F'; //choix français
    }
    //etc, etc, etc
    Alors tu pourrais tester quel comparaison appliquer plutôt via un 'switch', par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch (Mode)
    {
         case 'A':
                    //bla, bla...
         break;
         case 'F':
                    //bla, bla...
         break;
    }
    De plus, j'ai du mal a piger ce que fais le lancement du TTimer dans la boucle 'while'...si l'option 'automatique' a été choisie, le Timer ne devrais t il pas être lancé une fois pour toute et tout les traitements devraient être éffectué dans son 'OnTimer', ...non ?
    Bon, moi, je dis ça vite fait sans vraimment tout tester mais bon...
    @ +

  10. #30
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    pour le switch/case,

    un truc comme ça tu veux dire :

    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
     
    if(test->choixmanu->Checked==true)
    {
    switch (Mode)
    {
             case 'F':
                     Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
     
             break;
     
             case 'A':
            Edit1->Text=test->Table->FieldByName("Mot_Anglais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }while(test->Table->FieldByName("Mot_Anglais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
     
             break;
    }
    };
    le problème c'est que mes boutons ne sont pas sur la même form... et transférer une variable d'une form a l'autre c'est possible ? utiliser private, oui mais euhhh sa marche coment cette chose ??

    et euhhh pour le timer, oui j'ai mis la boucle do while dans le timer mais bon, sa change pas grand choz.. il tourne en boucle mais sans jamais s'arrêter...

    bouhhhh c'est la cata :s

    //EDIT

    Bon j'ai mis char Mode; dans le fichier H de la form A (contenant les radioboutons), mais dans ma form B (celle du test) contenant le code et incluant le fichier H de la form A, il me met que Mode est introuvable et d'autre part, avec le code que je t'ai mis plus haut il me sors 6 fois la même erreur : [C++ Error] fentest2.cpp(81): E2094 'operator||' not implemented in type 'AnsiString' for arguments of type 'bool' ou fentest2 est la form B

    si tu as une idée je suis preneur (même si tu en fais déja bcp pour moi ! )

  11. #31
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par barth69
    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
    if(test->choixmanu->Checked==true)
    {
    switch(variableATester)
    {
             case 'F':
                     Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
             
             break;
    
             case 'A':
            Edit1->Text=test->Table->FieldByName("Mot_Anglais")->AsString;
            do
            {
                    i=random(test->Table->RecordCount);
                    test->Table->RecNo=i;
            }while(test->Table->FieldByName("Mot_Anglais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
    
             break;
    }
    };
    Dans ton switch tu as oublié la variable à tester, je l'ai mis en rouge dans le code.

  12. #32
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par barth69
    le problème c'est que mes boutons ne sont pas sur la même form... et transférer une variable d'une form a l'autre c'est possible ? utiliser private, oui mais euhhh sa marche coment cette chose ??

    et euhhh pour le timer, oui j'ai mis la boucle do while dans le timer mais bon, sa change pas grand choz.. il tourne en boucle mais sans jamais s'arrêter...

    bouhhhh c'est la cata :s
    Tu peut créer un fonction qui retour un char dans la form ou ce situ
    Code :
    Citation Envoyé par Cantrelle
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char TMaForm::LireMode(void){
      return Mode ;
    }
    il ne te reste plus qu'a chercher dans ta form ou tu a le switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    switch(NomDeMaForm->LireMode()){
    ...
    }
    Sans oublier de mettre un dans le fichier .h de la form ou ce situ le switch.
    A plus

  13. #33
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    si j'ai bien compris, je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char Ttest::LireMode(void){
      return Mode ;
    }
    dans le fichier H de la form A (celle qui a les radiobouton),

    et dans la forme B (celle contenant le switch) je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "fentest.h"
    ce qui est déjà fait car j'ai besoin de pointer sur la table de la form A...

    //EDIT

    Je dois être un boulet parce que je comprends pas tout dans cette histoire...
    je viens de faire ce que je dis plus haut et voila ce que j'obtient :
    [C++ Error] fentest2.cpp(72): E2247 'Ttest::LireMode()' is not accessible

    hum... excusez mon ignorance en programmation

  14. #34
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par barth69
    si j'ai bien compris, je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char Ttest::LireMode(void){
      return Mode ;
    }
    dans le fichier H de la form A (celle qui a les radiobouton),
    Pas tout a fait, dans le .h de la Form A, tu met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public :
      char LireMode(void) ;
    et le code que tu as marqué, qui est juste au dessus, tu le met dans le .cpp de la Form A

  15. #35
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    C'est énorme !
    J'ai mis du temps mais j'ai pigé le fonctionnement de private et public ! private c'est uniquement pour les déclaration propre au code de la form A par ex et public c'est pour utiliser la varaible dans une autre form...
    c'est ça ? dites moi oui

    Bref en tout cas merci, mon switch fonctionne super bien !
    Me reste mnt à résoudre le problème du timer qui ne s'arrête jamais (un tirage aléatoire qui ne s'arrête jamais ce peut être embêtant ^^), et la vérification des traductions qui reste en permanence à 5 pour les réponse justes...

    Merci encore

    //EDIT

    Bon après réflexion, et comme je n'ai pas envie de passer toutes mes soirée sur ce p*** de projet, j'ai finalement décider de remplacer la StringList pour la vérif par une StringGrid ! J'ouvre une form à la fin du test contenant les réponses et les mots qui étaient à traduire, je propose la vérif et lors de la vérif il met les cases en vert ou rouge suivant si la réponse est juste ou fausse...

    Par contre j'arrive toujours pas a résoudre mon problème de Timer :s

  16. #36
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par barth69
    Par contre j'arrive toujours pas a résoudre mon problème de Timer :s
    C'est quoi ton probleme de Timer, j'ai pas tout suivi, c'est ta boucle do while dans tu ne sort jamais ou c'est le Timer qui ne s'arréte pas ?

  17. #37
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    je sais pas trop, certaine fois le timer n'exécute pas son code, d'autre il l'exécute mais en boucle donc j'ai un tirage aléatoire qui ne s'arrete jamais... par je ne sais pas si la boucle do while s'exécute ! j'ai testé un truc aprèm mais bon sa ma figé le pgm quand j'ai lancé le timer donc... j'en ai conclu que c'était pas terrible :s

    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
     
    randomize();
     
    switch(test->LireMode())
    {
            case 'F':
                    Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
                    verif->StringGrid1->Cells[0][1]=test->Table->FieldByName("Mot_Francais")->AsString;
                    do
                    {
                            i=random(test->Table->RecordCount);
                            test->Table->RecNo=i;
                    }
                    while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
                    nomfield="Mot_Français";
            break;
     
            case 'A':
                    Edit1->Text=test->Table->FieldByName("Mot_Anglais")->AsString;
                    verif->StringGrid1->Cells[0][1]=test->Table->FieldByName("Mot_Francais")->AsString;
                    do
                    {
                            i=random(test->Table->RecordCount);
                            test->Table->RecNo=i;
                    }
                    while(test->Table->FieldByName("Mot_Anglais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
                    nomfield="Mot_Anglais";
            break;
     
            case 'Al':
                    Edit1->Text=test->Table->FieldByName("Mot_Francais")->AsString;
                    do
                    {
                            i=random(test->Table->RecordCount);
                            test->Table->RecNo=i;
                    }
                    while(test->Table->FieldByName("Mot_Francais")->AsString.operator ==(Edit1->Text) || Edit1->Text.IsEmpty());
    }
     
    Edit2->Text="";
    Edit1->Text="";
    u--;

    voila ce que j'ai pour le timer, et dans le boutton qui lance le timer j'ai ça :

    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
     
    if(test->choixauto->Checked==true)
    {
            switch(test->LireTirage())
            {
                    case'di':
                            u=10;
                    break;
     
                    case'vi':
                            u=20;
                    break;
     
                    case'tr':
                            u=30;
                    break;
     
                    case'per':
                            u=StrToInt(test->Edit1->Text);
                    break;
            }
     
            boutontirage->Enabled=false;
     
            do
            {
                   Timer1->Enabled=true;
            }
            while(u!=0);
    };
    voili voilou ^^, je sais que le timer n'exécute qu'une seul fois son code après avoir terminé son décompte mais est ce qu'il s'arrête après avoir exécuter son code ? ou une fois qu'il est lancé il ne s'arrête plus ?

  18. #38
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par barth69
    voili voilou ^^, je sais que le timer n'exécute qu'une seul fois son code après avoir terminé son décompte mais est ce qu'il s'arrête après avoir exécuter son code ? ou une fois qu'il est lancé il ne s'arrête plus ?
    Pour l'arréter il faut que tu remet la propriété Enabled du Timer à false, sinon le timer recommencera toute la fonction tout les n milliseconde, n étant le chiffre que tu as mis dans la propriété Interval de ce Timer.

  19. #39
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    d'accord, donc cela confirme bien ce que je pensais, il faut arrêter le timer manuellement... enfin oui on se comprend.

    Donc ce que j'aimerais arriver à faire, c'est exécuter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Timer1->Enabled=false;
    lorsque la variable u, par exemple, est arrivé à 0...
    Voilà pourquoi j'avais mis des boucles do...while un peu partout. Le problème c'est que soit la boucle n'est pas exécutée, soit elle fige le programme :s.
    Donc si tu as une idée, je la prend volontier

    Merci de ton aide

    //EDIT

    Bon alors petite rectification, j'ai supprimé la boucle do while dans le code du bouton tirage mais par contre j'ai mis un if...else dans le code du timer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(u!=0)
    {
    .... //exécute le code du tirage aléatoire suivant le choix de l'utilisateur
    }
    else
    {
    ...//réactive le bouton tirage et désactive le timer
    }
    okay, jsuque la tout va bien, sauf que effectivement le timer s'exécute et il fait bien sa bucle puisque le bouton tirage n'est réactivé qu'au bout d'un certain tps... mais, il ne fait aucun tirage ! c'est a dire qu'il tourne mais à vide, sans exécuter le code du tirage aléatoire :s... je comprends pas du tout ce qui se passe !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. souci avec une comparaison de date
    Par Ludo75 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/02/2006, 15h59
  2. [VB] faire un update avec une bdd en xml
    Par ekmule dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 01/02/2006, 22h41
  3. [MySQL] Soucis avec une insertion dans une base
    Par Ludo75 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 27/01/2006, 14h03
  4. Dialoguer avec une BDD MySQL en language C
    Par veridik dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2005, 11h58
  5. SOucis avec une reequete imbriquee
    Par Ni4k dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/03/2004, 08h56

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