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 :

proble declaration variable publique


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut proble declaration variable publique
    bonjour,

    j'ai un probleme qui est certainement très bête et tout simple
    mais bon...

    dans l'appli que je fais, j'ai plusieurs fiches et je souhaite que certaines variables soient accessibles à partir de n'importe quelle fiche;
    j'ai donc déclarer une variable publique (periphs) basée sur un type (tbl_periph) ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      public
        { Déclarations publiques }
        type
         tbl_periph = record
           lecteur : string[2];
           description : string[200];
        end;
        var
         periphs : array[0..25] of tbl_periph;
      end;
    L'accès à periphs fonctionne dans la fiche courante mais pas dans une autre.
    J'ai essayé de rajouter ma fiche (celle contenant la déclaration) dans les autres fiches en passant par "uses" mais ca ne fait rien de plus.

    donc si quelqu'un peut me donner la soluce
    ca serait sympa

    merci

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 907
    Points : 6 031
    Points
    6 031
    Par défaut
    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public
        { Déclarations publiques }
        type
         tbl_periph = record
           lecteur : string[2];
           description : string[200];
        end;
        
      end;
    
    var
         periphs : array[0..25] of tbl_periph;
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    Syncèrement, j'ai de la difficulté à comprendre comment ça peut compiler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       public
          { Déclarations publiques }
       type
          tbl_periph = record
             lecteur: string[2];
             description: string[200];
          end;
       var
          periphs: array[0..25] of tbl_periph;
       end;
    On dirait que tu as intercalé une déclaration de type dans celle d'une classe. Ça ressemble à ce que je ferais en VB.NET .

    Règle générale, en Delphi, on n'utilise que ce qu'on déclare. De plus, Delphi lit du haut vers le bas, c'est à dire que ce qu'on utilise doit être déclaré plus haut dans le code. Si tu remarques, il y a 2 section uses. Peut-être que ton unit devrait se retrouver dans la section interface et non implementation.

    Perso, si j'avais à utiliser une variable globale, je la metterais dans un unit séparé des autres. Mais ceci étant dit, il y a toujours moyen de s'en sortir sans, ce qui non seulement clarifie le code mais permet sa réutilisation et est généralement une bonne habitude de programmation.

    Bon dev!
    -Slimjoe

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 907
    Points : 6 031
    Points
    6 031
    Par défaut
    Citation Envoyé par slimjoe
    Perso, si j'avais à utiliser une variable globale, je la metterais dans un unit séparé des autres.


    Regarde du coté du DataModule = unité d'un projet ne contenant aucun objet visuel
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par qi130
    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public
        { Déclarations publiques }
        type
         tbl_periph = record
           lecteur : string[2];
           description : string[200];
        end;
        
      end;
    
    var
         periphs : array[0..25] of tbl_periph;

    Marche pas non plus, meme dans la fiche principale !!!

  6. #6
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Marche pas non plus, meme dans la fiche principale !!!
    Quel est le message au juste ?

    Es-tu certain que le type va bien à l'intérieur la déclaration de la classe ? Suis pas certain que ça soit valide en Delphi ce type de déclaration.

    As-tu essayé ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      public
        { Déclarations publiques }
      end;
     
    type
        tbl_periph = record
           lecteur : string[2];
           description : string[200];
        end;
     
    var
         periphs : array[0..25] of tbl_periph;
    -Slimjoe

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par slimjoe
    Salut!

    Syncèrement, j'ai de la difficulté à comprendre comment ça peut compiler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       public
          { Déclarations publiques }
       type
          tbl_periph = record
             lecteur: string[2];
             description: string[200];
          end;
       var
          periphs: array[0..25] of tbl_periph;
       end;
    On dirait que tu as intercalé une déclaration de type dans celle d'une classe. Ça ressemble à ce que je ferais en VB.NET .

    Règle générale, en Delphi, on n'utilise que ce qu'on déclare. De plus, Delphi lit du haut vers le bas, c'est à dire que ce qu'on utilise doit être déclaré plus haut dans le code. Si tu remarques, il y a 2 section uses. Peut-être que ton unit devrait se retrouver dans la section interface et non implementation.

    Perso, si j'avais à utiliser une variable globale, je la metterais dans un unit séparé des autres. Mais ceci étant dit, il y a toujours moyen de s'en sortir sans, ce qui non seulement clarifie le code mais permet sa réutilisation et est généralement une bonne habitude de programmation.

    Bon dev!


    salut

    je suis d'accord avec toi sauf que :
    ma declaration est bonne : je declare un type de donnée (tbl_periph) et ensuite une variable basé sur ce type (periphs),
    j'ai essayé de rajouter la fiche dans la partie "implementation" ou "uses" et le resultat est le meme : marche pas

    Par contre, le fait de creer une nouvelle "unit" qui contient toutes les variables fonctionne.

    je vais donc partir sur ce principe, mais il n'empeche que je ne comprends pas d'ou vient l'erreur; surtout que ce principe fonctionne a 100% sur delphi pro 4;
    là je suis en version 2005 personnelle.

    Merci

  8. #8
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!


    mais il n'empeche que je ne comprends pas d'ou vient l'erreur
    Simple :

    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
     
     
       public  // <-- Fait partie de la déclaration d'une classe.  Donc, on est déjà À L'INTÉRIEUR DE LA DÉCLARATION D'UN TYPE DE DONNÉES
     
          { Déclarations publiques }
     
       type // <-- On déclare une AUTRE section "type" À L'INTÉRIEUR DE LA CLASSE (qui est elle même dans une section "type").  Ça ne peut que planter ;-)
     
          tbl_periph = record
             lecteur: string[2];
             description: string[200];
          end;
     
       var // <-- On déclare une section "var" toujours à l'intérieur d'une déclaration de classe
          periphs: array[0..25] of tbl_periph;
     
       end;  <-- Semble être le "end;" de la déclaration de la classe
    Selon ma connaissance (toutefois limitée ), Delphi ne permet pas d'imbriquer les types de données.

    À mon avis, ça fonctionne dans le second unit parce qu'il n'y a pas de déclaration de classe qui vient t'embêter.

    Qu'en dis-tu ?
    -Slimjoe

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par slimjoe
    Salut!




    Simple :

    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
     
     
       public  // <-- Fait partie de la déclaration d'une classe.  Donc, on est déjà À L'INTÉRIEUR DE LA DÉCLARATION D'UN TYPE DE DONNÉES
     
          { Déclarations publiques }
     
       type // <-- On déclare une AUTRE section "type" À L'INTÉRIEUR DE LA CLASSE (qui est elle même dans une section "type").  Ça ne peut que planter ;-)
     
          tbl_periph = record
             lecteur: string[2];
             description: string[200];
          end;
     
       var // <-- On déclare une section "var" toujours à l'intérieur d'une déclaration de classe
          periphs: array[0..25] of tbl_periph;
     
       end;  <-- Semble être le "end;" de la déclaration de la classe
    Selon ma connaissance (toutefois limitée ), Delphi ne permet pas d'imbriquer les types de données.

    À mon avis, ça fonctionne dans le second unit parce qu'il n'y a pas de déclaration de classe qui vient t'embêter.

    Qu'en dis-tu ?
    en effet tu as raison, il faut que je fasse ma declaration juste apres le end
    de la declaration "public" et la tout fonctionne

    public
    { Déclarations publiques }
    end;
    type
    tbl_periph = record
    lecteur: string[2];
    description: string[200];
    end;
    var
    periphs: array[0..25] of tbl_periph;


    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/05/2006, 00h58
  2. Réponses: 11
    Dernier message: 11/05/2006, 10h09
  3. [VB.net] Declaration variable dans une boucle for
    Par nico10gbb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/05/2006, 11h45
  4. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49
  5. [debutant] declaration variable
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/06/2004, 16h59

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