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

Langage Delphi Discussion :

EListError avec indice de liste hors limites(21)


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut EListError avec indice de liste hors limites(21)
    j'ai un TIBQuery nommé qyGeneriques qui "plante" sur l'instruction Open :
    "indice de liste hors limites(21)".
    remarque : 21 est le nombre de champs persistants du TIBQuery.
    Je ne vois pas d'où peut provenir l'erreur et pourquoi sur le open ?
    Quelqu'un a t il une idée svp. merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    with qyGeneriques do
      begin
        SQL.Clear;
        SQL.AddStrings(slSQLInitGen);
        Close;
        setQyeryParams(qyGeneriques, true);
    //    SQL.SaveToFile('C:\TEMP\qyGen.sql');
        Open;
        First;
      end;

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Ces quelques lignes ne sont pas a priori très parlantes.
    Tu as des événements AfterOpen ou AfterScroll qui poseraient problème ?

    La définition des champs persistants est-elle correcte (un champ persistant absent de la requête) ?

    EListError, inattendu sur un Open ?

    @+

  3. #3
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    bonjour Cl@udius,

    aucun évènement est relié au TIBQuery dans l'inspecteur d'objet. Quant aux champs persistants je les ai obtenu avec un double-click sur le composant TIBQuery puis click droit "ajouter des champs" dans l'éditeur de champs (donc ces champs existent dans la requête). as tu besoin d'autre informations ?

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    C'est bien sur Open que cela plante, et non à l'appel de setQueryParams ?

    Si oui, supprime temporairement tes champs persistants pour s'assurer qu'ils sont bien en cause.

    @+

  5. #5
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    oui c'est bien sur l'instruction Open que ça plante. si je supprime temporairement les champs persistants, ça marche (mais ça plante plus loin dans le code ...)

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par jakouz Voir le message
    [...] mais ça plante plus loin dans le code ...
    Ah et ça plante sur quoi ?

    Car, sauf erreur de ma part, il n'y a pas de relation entre un TDataSet (ou un descendant) et la classe d'exception EListError.

    [Edit]
    Un Echec sur le Open devrait te renvoyer une exception de type EIBxxxError.

  7. #7
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    oui c'est pour cela que je ne comprend pas le type de l'erreur par rapport au contexte. remarque : la requete en elle même fonctionne car je l'ai testé dans un autre outil que Delphi (SQL manager for Interbase). cela me rend un 11 enregistrements. Donc je n'ai pas vraiment de pistes où creuser pour corriger ce bug !

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Si 21 correspond au nombre de champs persistants, tu dois quelque part avoir un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      for I := 0 to IBQuery1.FieldCount do
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      for I := 0 to IBQuery1.FieldCount - 1 do
    Ce qui lève bien une exception EListError.
    Etonné suis-je.

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Normalement, un Query avec des Champs persistants ne doit pas changer de SQL, celui étant généralement défini dans l'IDE

    Si tu veux un Query dynamique qui permet d'être utiliser pour n'importe quel SQL, il ne faut pas de champ persistant mais utilise FieldByName à la place !
    Normalement, DefaultFields est à False, cela indique qu'il utilise des champs persistants ou des champs générés en fonction du recordset reçu !
    Pour un Query dynamique, DefaultFields doit rester à True !

    Evidemment, si tu déclares 21 champs persistants et que la requête ne renvoie que 11 champs, ça ne peut pas fonctionner !

    setQyeryParams, qui doit être en vrai setQueryParams, est une fonction à toi ! cela fait quoi ?

    Ce n'est pas l'erreur que tu ne comprends pas ! C'est plutôt l'utilisation des Champs persistants !
    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

  10. #10
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    après recherche, il n'y a pas pas de boucle for avec FieldCount dans le code ...

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Tu fais forcément un accès à une liste en dehors ses bornes.
    21 n'est peut-être qu'un hasard trompeur.

    Pas de T[Object]List, TStringList, ou autres Items...

  12. #12
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    je suis d'accord qu'il y a forcement un accès à une liste qq part, mais vu que ça plante sur l'instruction "Open" et pas après (en effet en mode débuggage F8 je ne vais pas à l'instruction suivante "First"), alors je ne vois pas où chercher

  13. #13
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    et les propositions de Shai ? les as-tu explorées ?

    Citation Envoyé par ShaiLeTroll Voir le message
    Normalement, un Query avec des Champs persistants ne doit pas changer de SQL, celui étant généralement défini dans l'IDE

    Si tu veux un Query dynamique qui permet d'être utiliser pour n'importe quel SQL, il ne faut pas de champ persistant mais utilise FieldByName à la place !
    Normalement, DefaultFields est à False, cela indique qu'il utilise des champs persistants ou des champs générés en fonction du recordset reçu !
    Pour un Query dynamique, DefaultFields doit rester à True !

    Evidemment, si tu déclares 21 champs persistants et que la requête ne renvoie que 11 champs, ça ne peut pas fonctionner !

    setQyeryParams, qui doit être en vrai setQueryParams, est une fonction à toi ! cela fait quoi ?

    Ce n'est pas l'erreur que tu ne comprends pas ! C'est plutôt l'utilisation des Champs persistants !

  14. #14
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    OK je vais explorer la proposition de ShaiLeTroll

Discussions similaires

  1. erreur: indice de liste hors limite
    Par Abou Zar dans le forum Web & réseau
    Réponses: 12
    Dernier message: 06/10/2010, 13h08
  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