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 :

[D5] function VarArrayCreate


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut [D5] function VarArrayCreate
    Bonsoir!
    Voici une copie de l'aide Delphi:
    function VarArrayCreate(const Bounds: array of Integer; VarType: Integer): Variant;
    Description
    La fonction VarArrayCreate crée un tableau de variants avec les limites données par Bounds et le type d'élément par VarType.
    Le paramètre Bounds doit contenir un nombre pair de valeurs, et chaque couple de valeurs spécifie les limites supérieure et inférieure d'une ligne du tableau.
    Je ne comprend pas l'explication de Bounds.
    J'ai une feuille de calcul excel de 23 colonnes sur un nombre de lignes évolutif (actuellement au alentours de 1500 mais çà s'allonge tous les jours de 10 à 20 lignes) comment dois-je définir mon tableau sachant que dans mon appli j'utilise par la suite un nouveau tableau de variants équivalant à une ligne soit [1,23] je suppose.
    Quelqu'un peut-il m'expliquer?
    j'ai écrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Col_NAff := VarArrayCreate([23, NbTLig], varVariant);
    Col_NAff := vFeuille.Range['A2','W' + IntToStr(NbTLig)].Value;
    ...
    For I := 1 to NbTLig do 
    begin
    L_Rec        := Col_NAff[23,I+1];
    mais çà plante à l'exécution avec le message: indice de tableau de variant hors limite.
    Merci.

  2. #2
    Membre expérimenté
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Par défaut
    Remplace

    Col_NAff := VarArrayCreate([23, NbTLig], varVariant);

    Par
    Col_NAff := VarArrayCreate([1, 23, 1, NbTLig], varVariant);


    La 1er valeur indique l'indice de base, et la seconde l'indice de fin. En somme, Col_NAff := VarArrayCreate([1, 23, 1, NbTLig], varVariant) equivau à Col_NAff : Array [1..23, 1..NbTLig] of Variant.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    For I := 1 to NbTLig do
    begin
    L_Rec := Col_NAff[23,I+1];mais çà plante à l'exécution avec le message: indice de tableau de variant hors limite.
    L'erreur est logique.
    La borne inf =23 est superieur à la borne sup pour i qui varie de 1 à 23.

    Pour corriger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for I := 23 to NbTLig do
      begin
        L_Rec := Col_NAff[23, I+1];
      end;
    Bounds est un tableau unidimentionnel de VarType.

  4. #4
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Citation Envoyé par Fabrice ROUXEL 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for I := 23 to NbTLig do
      begin
        L_Rec := Col_NAff[23, I+1];
      end;
    Bounds est un tableau unidimentionnel de VarType.
    J'ai testé, mais visiblement je n'ai pas compris l'explication.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Création
                Col_NAff := VarArrayCreate([1, 23, 1, NbTLig], varVariant);
                // La 1er valeur indique l'indice de base, et la seconde l'indice de fin.
                // En somme, Col_NAff := VarArrayCreate([1, 23, 1, NbTLig], varVariant)
                // equivaud à Col_NAff : Array [1..23, 1..NbTLig] of Variant.
    // Initialisation
                Col_NAff := vFeuille.Range['A2','W' + IntToStr(NbTLig)].Value;  // Sélection
    // Création de L-Rec repésentant une ligne du tableau soit 23 colonnes
                     L_Rec := VarArrayCreate([1, 23,1,1], varVariant);
    // Initialisation Col :=colonnes 1 à 23 et Lig := ligne en cours +1
                     L_Rec        := Col_NAff[1,23,I+1,I+1];
    Classe d’exception EVariantError avec le message : »Indice de tableau de variants hors limites »
    J'ai ce message d'erreur sur la ligne rouge.
    Je souhaite affecter à mon second variant un tableau composé d'une ligne du 1er. J'ai mis des bornes 1 et 23 pour mes colonnes.
    La ligne à prendre en compte étant unique les bornes haut et bas sont identiques.
    merci

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    J'ai testé, mais visiblement je n'ai pas compris l'explication.
    Et avec cet exemple?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    var
      A: Variant;
    begin
      A := VarArrayCreate([0, 2, 0,1], varVariant);
      A[0,0] := '0-0';
      A[0,1] := '0-1';
      A[1,0] := '1-0';
      A[1,1] := '1-1';
      A[2,0] := '2-0';
      A[2,1] := '2-1';
      ShowMessage(A[0,0]);
    end;
    Dans ton code:
    L_Rec:= Col_NAff[1,23,I+1,I+1];
    ça c'est à revoir: I+1,I+1

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

Discussions similaires

  1. implicit declaration of function
    Par guillaume_pfr dans le forum C
    Réponses: 7
    Dernier message: 12/06/2003, 10h59
  2. [POSTGRESQL] exec function
    Par peuh dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/05/2003, 15h15
  3. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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