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

Web & réseau Delphi Discussion :

erreur: indice de liste hors limite


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 308
    Points : 50
    Points
    50
    Par défaut erreur: indice de liste hors limite
    Bonjour,

    J'ai 2 utilisateurs crées sur mon serveur FTP.
    Quand je me conecte avec le deuxieme utilisateur le message suivant s'affiche à la validation : "indice de liste hors limite(0)".
    Mais le premier utilisateur ne me pose pas ce probleme.
    Quand dans mon code je change le "0" en "1" il me dit "indice de liste hors limite(1)".
    Voici la portion de 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
    procedure TForm23.Raffraichir1Click(Sender: TObject);
    Var n:integer;
       taille:extended;
       ListItem:TListItem;
       liste:TStringList;
       resultat,DossierCourant,x,x2:string;
       Ext : pchar;
       Icone: TIcon;
    begin
    liste:=TStringList.Create;
    Icone:= TIcon.Create;
    listview1.Clear;
    liste.Clear;
    if not (IdFTP1.Connected) then Button1.onclick(sender);
    DossierCourant:=IdFTP1.RetrieveCurrentDir;
    ComboBox1.Text:=DossierCourant;
    ComboBox1.Items.Add(DossierCourant);
    IdFTP1.List(liste,'',false);
    IdFTP1.ChangeDir(DossierCourant);
    RichEdit1.lines.add('Transfert de liste fichier en cours...');
    repeat
       x:=liste[0];
    c'est la derniere ligne le probleme.

    Merci de votre aide!

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 553
    Points : 25 133
    Points
    25 133
    Par défaut
    tu ne mets pas le plus important le until ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i:= 0 to liste.count - do
      x := liste[i];
    Tu devrais revoir les bases de la programmation sur les boucles et le parcours de Tableau ou Liste avant de t'attaquer à un Server FTP
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 308
    Points : 50
    Points
    50
    Par défaut
    ok,
    voici le code complet de la procedure
    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
    procedure TForm1.Rafrichir1Click(Sender: TObject);
    Var n:integer;
       taille:extended;
       ListItem:TListItem;
       liste:TStringList;
       resultat,DossierCourant,x,x2:string;
       Ext : pchar;
       Icone: TIcon;
    begin
    liste:=TStringList.Create;
    Icone:= TIcon.Create;
    listview1.Clear;
    liste.Clear;
    if not (IdFTP1.Connected) then Button1.onclick(sender);
    DossierCourant:=IdFTP1.RetrieveCurrentDir;
    ComboBox1.Text:=DossierCourant;
    ComboBox1.Items.Add(DossierCourant);
    IdFTP1.List(liste,'',false);
    IdFTP1.ChangeDir(DossierCourant);
    richedit1.lines.add('Transfert de liste fichier en cours...');
    repeat
       x:=liste[0];
       n:=ListView1.Items.Count;
       if (idftp1.Size(x)) <= 0 then
       begin
          ListItem:=ListView1.Items.Add;
          richedit1.SelAttributes.Color:=clnavy;
          richedit1.Lines.Add(x);
          ListItem.Caption:=x;
          ListItem.SubItems.Add('Dossier');
          ListView1.Items[n].ImageIndex:=0;
       end else begin
          Ext:=Pchar(ExtractFileExt(x));//Recuperer l'icon de l'extention de fichier
          Icone.Handle := GetAssociatedIcon(Ext);
          ImageList1.AddIcon(Icone);
          ListItem:=ListView1.Items.Add;
          richedit1.SelAttributes.Color:=clnavy;
          richedit1.Lines.Add(x);
          ListItem.Caption:=x;
          taille:=idftp1.Size(x)/1024;
          if taille<1 then
             ListItem.SubItems.Add(floattostr(int(taille*1024))+' Octets')
             else ListItem.SubItems.Add(floattostr(int(taille))+' Ko');
          listview1.Items[n].ImageIndex := ImageList1.Count -1;
       end;    liste.Delete(0);
    until liste.Count=0;
    richedit1.SelAttributes.Color:=clgreen;
    richedit1.lines.add('Transfert Terminé');
    end;
    Merci pour l'aide!

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 289
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 289
    Points : 1 940
    Points
    1 940
    Par défaut
    Si aucun fichier n'est présent, tu as un indice hors limite.
    Plutôt qu'un repeat avec des conditions d'exécutions qui peuvent êter fausses, il vaudrait mieux un while (test de fin de boucle au début au lieu d'à la fin)
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2022

  5. #5
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 308
    Points : 50
    Points
    50
    Par défaut
    Bonjour,
    Merci pour la reponse, effectivement qand je met un fichier l'erreur n'est plus là!

    Pour la boucle while, quelle sera la condition à verifier?

    Merci de m'eclaircir davantage!

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 313
    Points
    13 313
    Par défaut
    La même !

    While teste avant, repeat..until teste après.

  7. #7
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 289
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 289
    Points : 1 940
    Points
    1 940
    Par défaut
    Pas la même mais son inverse
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2022

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 313
    Points
    13 313
    Par défaut
    Bien sûr

  9. #9
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 308
    Points : 50
    Points
    50
    Par défaut
    Merci d'integrer les changements dans le code (comme il est là).
    Sinon je n'arrive pas à vous suivre.

    Merci bien!

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Jai,
    Citation Envoyé par Abou Zar Voir le message
    Merci d'integrer les changements dans le code (comme il est là).
    Sinon je n'arrive pas à vous suivre.

    Merci bien!
    Je peux aussi venir border ton lit le soir, si ça peut te rendre service.

    C'est en programmant qu'on devient programmeur !
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 553
    Points : 25 133
    Points
    25 133
    Par défaut
    Abou Zar, as-tu au moyen essayé ma réponse en utilisant le for ?

    Un minimum d'effort est requis !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 308
    Points : 50
    Points
    50
    Par défaut
    Meme avec While ou for il ya probleme!

  13. #13
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 364
    Points
    5 364
    Par défaut
    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
    liste:=TStringList.Create;
    try
    Icone:= TIcon.Create;
    listview1.Clear;
    liste.Clear;
    if not (IdFTP1.Connected) then Button1.onclick(sender);
    DossierCourant:=IdFTP1.RetrieveCurrentDir;
    ComboBox1.Text:=DossierCourant;
    ComboBox1.Items.Add(DossierCourant);
    IdFTP1.List(liste,'',false);
    IdFTP1.ChangeDir(DossierCourant);
    richedit1.lines.add('Transfert de liste fichier en cours...');
    for i := 0 to liste.count - 1 do
    begin
       x:=liste[i];
       n:=ListView1.Items.Count;
       if (idftp1.Size(x)) <= 0 then
       begin
          ListItem:=ListView1.Items.Add;
          richedit1.SelAttributes.Color:=clnavy;
          richedit1.Lines.Add(x);
          ListItem.Caption:=x;
          ListItem.SubItems.Add('Dossier');
          ListView1.Items[n].ImageIndex:=0;
       end else begin
          Ext:=Pchar(ExtractFileExt(x));//Recuperer l'icon de l'extention de fichier
          Icone.Handle := GetAssociatedIcon(Ext);
          ImageList1.AddIcon(Icone);
          ListItem:=ListView1.Items.Add;
          richedit1.SelAttributes.Color:=clnavy;
          richedit1.Lines.Add(x);
          ListItem.Caption:=x;
          taille:=idftp1.Size(x)/1024;
          if taille<1 then
             ListItem.SubItems.Add(floattostr(int(taille*1024))+' Octets')
             else ListItem.SubItems.Add(floattostr(int(taille))+' Ko');
          listview1.Items[n].ImageIndex := ImageList1.Count -1;
       end;    
    end;
    finally
      if (assigned(liste)) then
        FreeAndNil(liste);
    end;
    richedit1.SelAttributes.Color:=clgreen;
    richedit1.lines.add('Transfert Terminé');
    Non testé mais ça devrait fonctionner et ça me parait déjà plus propre comme ça.
    D'ailleurs pense à utiliser d'autres noms que ListView1 ou RichEdit1 ! ça fait vraiment travail baclé !

Discussions similaires

  1. EListError avec indice de liste hors limites(21)
    Par jakouz dans le forum Langage
    Réponses: 13
    Dernier message: 18/03/2011, 08h29
  2. Indice de liste hors limite
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/02/2007, 11h42
  3. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31
  4. Indice de liste hors limite !!! Report
    Par EssaiEncore dans le forum Langage
    Réponses: 1
    Dernier message: 29/11/2005, 10h00

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