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

Delphi Discussion :

Indice hors limite


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut Indice hors limite
    Salut tout le monde;
    Voilà ce bout de procédure me permet plus d'avancer tanque j'arrive pas a trouver la solution, je souhaite que quelqu'un me corrige l'erreur "indice hors limite"
    Merçi.


    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
    var i: Integer;
     
      begin
     
      table1.open;
      if messagedlg('Etes Vous Sure De Vouloir Prendre en Charge.' +edit1.text+'?',mtconfirmation,[mbyes,mbno],0)=mryes then
     begin
       for i:= 0 To Checklistbox1.Items.Count -1 do
      begin
     
     IF NOT Table1.findkey([e1.text])then
     begin
     
       IF NOT Table1.findkey([CheckListbox1.items[i],0,4])then
       begin
           if ChacklistBox1.checked[i]= true then
             begin
        table1.insert;
        table1.fieldbyname('Nummdt').asstring:=edit1.Text;
        table1.fieldbyname('Chap').asstring:=copy(checklistbox1.items[i],0,4);
        table1.fieldbyname('Annee').asstring:=Combobox1.text;
        table1.fieldbyname('Mois').asstring:=Combobox2.text;
        table1.Post;
       end;

  2. #2
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    copy(checklistbox1.items[i],1,4)

  3. #3
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    copy(checklistbox1.items[i],1,4)
    Bonsoir,

    Je ne pense pas que le problème vienne de là, car Copy accepte les "débordements".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      St: string;
    begin
      St := Copy('essai',0, 4);
      button1.Caption := St;
    end;
    Ce code fonctionne de la même manière qu'avec St := Copy('essai',1, 4);
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  4. #4
    Membre actif
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Par défaut
    Citation Envoyé par gvasseur58 Voir le message
    Bonsoir,

    Je ne pense pas que le problème vienne de là, car Copy accepte les "débordements".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      St: string;
    begin
      St := Copy('essai',0, 4);
      button1.Caption := St;
    end;
    Ce code fonctionne de la même manière qu'avec St := Copy('essai',1, 4);
    l'erreur persiste, et on exécutant F7 (pas à pas) le compilateur m'indique la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for i:= 0 To Checklistbox1.Items.Count -1 do

  5. #5
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par bastion Voir le message
    l'erreur persiste, et on exécutant F7 (pas à pas) le compilateur m'indique la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for i:= 0 To Checklistbox1.Items.Count -1 do
    Comme i est de type Integer, je ne vois aucune raison pour qu'un indice hors limites soit indiqué ici. Que se passe-t-il ensuite (après un nouveau F7) ? Après quelle ligne se déclenche l'exception ?
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par bastion Voir le message
    Salut tout le monde;
    Voilà ce bout de procédure me permet plus d'avancer tanque j'arrive pas a trouver la solution, je souhaite que quelqu'un me corrige l'erreur "indice hors limite"
    Merçi.


    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
    var i: Integer;
     
      begin
     
      table1.open;
      if messagedlg('Etes Vous Sure De Vouloir Prendre en Charge.' +edit1.text+'?',mtconfirmation,[mbyes,mbno],0)=mryes then
     begin
       for i:= 0 To Checklistbox1.Items.Count -1 do
      begin
     
     IF NOT Table1.findkey([e1.text])then
     begin
     
       IF NOT Table1.findkey([CheckListbox1.items[i],0,4])then
       begin
           if ChacklistBox1.checked[i]= true then
             begin
        table1.insert;
        table1.fieldbyname('Nummdt').asstring:=edit1.Text;
        table1.fieldbyname('Chap').asstring:=copy(checklistbox1.items[i],0,4);
        table1.fieldbyname('Annee').asstring:=Combobox1.text;
        table1.fieldbyname('Mois').asstring:=Combobox2.text;
        table1.Post;
       end;
    Bonsoir,

    Il est préférable de fournir la procédure complète et structurée pour mieux la comprendre
    A première vue, le code ne s'occupe pas du cas particulier où la checklistbox ne comprend pas d'élément : la variable i va donc varier de 0 à 0 (il y aura par conséquent au moins une boucle) et provoquer une erreur dès le test if ChecklistBox1.checked[i] then. En effet, l'élément 0 n'existant pas, l'exception index hors limites est levée.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Citation Envoyé par gvasseur58 Voir le message
    le code ne s'occupe pas du cas particulier où la checklistbox ne comprend pas d'élément : la variable i va donc varier de 0 à 0 (il y aura par conséquent au moins une boucle)
    C'est un cas implicitement géré (aucun risque d'exception), for..to requiert une incrémentation. 0..-1 n'est pas valide, donc pas de boucle

    Citation Envoyé par bastion Voir le message
    je souhaite que quelqu'un me corrige l'erreur "indice hors limite"
    Il n'y a pas tant d'éléments indicés et rien n'est vraiment choquant. Donner la ligne sur laquelle l'erreur survient pourrait donner un autre "indice"

  8. #8
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    C'est un cas implicitement géré (aucun risque d'exception), for..to requiert une incrémentation. 0..-1 n'est pas valide, donc pas de boucle
    J'ai répondu un peu vite. La remarque est juste...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  9. #9
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par gvasseur58 Voir le message
    J'ai répondu un peu vite. La remarque est juste...
    Bonjour,

    Comme je l'ai mentionné précédemment il y a de toute façon un problème car le findKey porte une fois sur une table avec une clé primaire simple (sur un seul champ) et une fois sur une table avec une clé primaire composée (sur trois champs) d’où la correction que j'ai apporté dans mon précédent post.

  10. #10
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Bonjour,

    Comme je l'ai mentionné précédemment il y a de toute façon un problème car le findKey porte une fois sur une table avec une clé primaire simple (sur un seul champ) et une fois sur une table avec une clé primaire composée (sur trois champs) d’où la correction que j'ai apporté dans mon précédent post.
    et de deux... Bien sûr, la solution apportée dans le post cité est bonne : je me contentais de répondre à propos d'une recherche d'indice...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  11. #11
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut Un élément de réponse
    Bonsoir

    A mon avis le code devrait plutôt ressembler à ceci

    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
     
    var
      i: Integer;
    begin
      table1.open;
      if messagedlg('Etes Vous Sure De Vouloir Prendre en Charge.' +edit1.text+'?',mtconfirmation,[mbyes,mbno],0)=mryes then
      begin
        for i:= 0 To Checklistbox1.Items.Count -1 do
        begin
          if (not Table1.findkey([e1.text]) and (not Table1.findkey([copy(checklistbox1.items[i],1,4)])) 
          and (ChecklistBox1.checked[i]) then
              begin
                table1.insert;
                table1.fieldbyname('Nummdt').asstring:=edit1.Text;
                table1.fieldbyname('Chap').asstring:=copy(checklistbox1.items[i],1,4);
                table1.fieldbyname('Annee').asstring:=Combobox1.text;
                table1.fieldbyname('Mois').asstring:=Combobox2.text;
                table1.Post;
              end;

Discussions similaires

  1. StringGrid Indice hors limite
    Par DURVILLE dans le forum Langage
    Réponses: 7
    Dernier message: 02/04/2011, 11h12
  2. erreur indice hors limites
    Par ryma87rh dans le forum C++
    Réponses: 9
    Dernier message: 19/03/2009, 08h55
  3. Indice hors limite(0)
    Par Morfus dans le forum Langage
    Réponses: 17
    Dernier message: 11/09/2008, 10h42
  4. [TListBox] Problème "Indice hors limite (-1)"
    Par renorx dans le forum Composants VCL
    Réponses: 16
    Dernier message: 08/12/2005, 17h47
  5. Erreur "indice hors limite(0)" non comprise
    Par Bruno1905 dans le forum Bases de données
    Réponses: 9
    Dernier message: 10/06/2005, 12h02

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