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

Lazarus Pascal Discussion :

Transmission de valeurs de variables communes [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 388
    Points : 226
    Points
    226
    Par défaut Transmission de valeurs de variables communes
    Bonjour,
    J'ai une application de base de données avec une fiche principale et des fiches secondaires et une unité commune où j'ai des fonctions ou procédures utilisées par tout les unités. Cette unité n'ayant pas de fiche est n'apparait dans le projet que comme une unité, pas de création ...
    Dans cette unité commune j'ai déclaré des variables communes dont une MTABLE qui est le résultat d'un calcul réalisé dans la fiche principale qui est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MTABLE:=MCHEMIN+'tables'+MSEPARATEUR+MBASE;
    MTABLE correspond à la valeur de FileName d'un TSqlite3Dataset
    MSEPARATEUR lui correspond au séparateur de dossier différent selon windows ou linux
    MBASE étant le nom de la base de donnée sqlite3
    Je cherche à utiliser cette valeur calculée MTABLE dans une fiche secondaire pour déclarer le FileName de tables utilisées seulement dans cette fiche et erreur. Si via le Débugueur et sa fonction d'évaluation ou via un message la valeur de MTABLE='' mais si je la recalcule elle retrouve la bonne valeur.
    Erreur de vieux débutant ?, je pensais que la variable déclarée en commun pouvait avoir sa valeur calculée dans toutes les fiches.
    Merci d'avance

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    Apparemment, dans ton cas, la valeur de MTABLE a été utilisée par ta fiche secondaire lors de sa création, AVANT qu'elle ne soit initialisée dans la fiche principale.
    L'idéal, quand on déclare une variable globale dans une unité spéciale, c'est de l'initialiser dans cette unité.
    Où ? : dans la section initialization de cette unité.
    Mais cela suppose évidemment que cette unité ait déclaré et initialisé aussi MCHEMIN, MSEPARATEUR, MBASE.
    Dans ce genre d'unité, il faut éviter toute référence à une unité liée à une fiche.

    Cordialement
    Thierry

  3. #3
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 388
    Points : 226
    Points
    226
    Par défaut
    Merci Thierry pour ta réponse mais je ne trouve pas de section initialization danss mes unités, j'ai oublié de préciser que je suis sous linux.
    J'ai regardé dans le projet car utilisant un datamodule j'ai eu des problèmes car cette unité n'était pas la première dans le projet, et mon unité principale est juste derrière la déclaration du datamodule et les unités secondaires sont déclarées après sauf si le système ne suis pas la liste dans le projet.
    Pour régler mon problème je redéclare la valeur dans mon unité secondaire ce n'est pas très pro mais mon problème est réglé pour l'instant.
    Encore merci A+

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Il faut rajouter cette section initialization juste avant le end. de ton unité. Par la même occasion, tu peux aussi ajouter une section finalization par exemple pour libérer un objet alloué dans la section initialization.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    initialization
      Mylist := TList.Create;
    finalization
      MyList.Free;
    end.

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 388
    Points : 226
    Points
    226
    Par défaut
    Ok merci j'aurais encore appris sur lazarus et c'est très bien ainsi.

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

Discussions similaires

  1. transmission des valeurs d'une variable d'une fonction a une autre
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 22/07/2009, 23h05
  2. Réponses: 4
    Dernier message: 09/06/2007, 01h33
  3. [Debutant][Système]Récupérer la valeur des variables systeme
    Par cameleon2002 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/02/2007, 09h57
  4. Réponses: 6
    Dernier message: 26/04/2005, 12h09
  5. threads et variables communes
    Par buzzz dans le forum Windows
    Réponses: 3
    Dernier message: 21/02/2005, 13h39

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