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 :

[Linux] Passage de variable entre unités [Lazarus]


Sujet :

Lazarus Pascal

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut [Linux] Passage de variable entre unités
    Bonjour,
    J'ai un petit problème, j'ai une application sous lazarus et linux avec une unité principale qui est la plaque tournante d'unités spécialisées qui sont appelées via Fxxxx.show..
    Dans ces unités je travaille sur une base sqlite et j'y modifie des informations dans des tables de cette base.
    Dans ces unités si je change une information dans une table je change la valeur d'une variable que j'appelle MMODIFICATION et je lui donne la valeur 'OUI'.
    Après retour dans l'unité principale si je veux quitter l'application je souhaite faire une sauvegarde de la base. Pour cela je dois pouvoir récupérer la valeur de MMODIFICATION et je n'y arrive pas pourtant avec delphi mais sous windows j'y arrive.
    Comment faire. Pour l'instant j'ai contourné le problème et modifiant un champ dans une des tables de ma base et je le contrôle avant la sortie, mais je pense qu'il a mieux.
    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Bonsoir ET

    Pour gérer ce genre de situation, voici comment procéder. J'en parle d'ailleurs dans un des tutos malin

    Déclare un DataModule dans lequel tu places tes composants d'accès aux données. Chaque utilisation d'un composant data en mode ajout, modif ou supprime doit être suivi d'un applyupdate.

    Ce faisant, chaque unité doit avoir dans son uses le lien vers ton datamodule.

    A partir de la, tu gères d'une façon plus rationnelles tes données et a n'importe quel moment, ta base est à jour et donc exploitable depuis tes Form. Il suffit juste de rafraichir les requêtes des retour dans la form appelante.

    Bon courage

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Je pense que je me suis mal exprimé, car ta réponse chris37 ne correspond pas à mon besoin, donc je précise.
    J'ai besoin de pouvoir utiliser la valeur d'une variable MMODIFICATION dans l'unité principale, mais la valeur de cette variable est modifiée dans les autres unités, par exemple quand je modifie le contenu d'une table avec l'entrée d'une nouvelle information dans une table de ma base et ce besoin c'est pour assurer une sauvegarde de la base, modifiée par cette nouvelle entrée, au moment de la clôtture de mon application.
    J'espère avoir été plus clair.
    A+

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Je faire plus simple
    Mon application gère des données avec base sqlite avec plusieurs tables.
    Mon fiche principale donne accès à d'autres fiches via un bouton déclenchant un appel fiche.show. Dans ces fiches si je modifie des données dans une des tables je change la valeur d'une variable que j'appelle MMODIFICATION et je lui donne une nouvelle valeur qui est 'OUI'
    Quand j'ai fini avec cette fiche je reviens sur dans la fiche principale, si je quitte mon application je vérifie la valeur de MMODIFICATION ey si elle est égale à 'OUI' je fais une sauvegarde de ma base.
    Voila A+

  5. #5
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    ok

    Tu as donc MAFORM.SHOW //Ouverture d'une fiche

    //Avant de fermer ta forme tu test ta variable par

    IF MAFORM.MAVARIABLE THEN //Déclarer en public dans ta form
    //Trt

    ensuite tu fais ton MAFORM.FREE
    On doit y être maintenant

    @+

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Autre explication avec des extraits d'une application sous delphi et xp
    fiche principale : FAutoP déclaration de la variable MMODIFICATION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      FAutoP: TFAutoP;
      MCODE,MSAUVE_A,MSAUVE_B,MSAUVE_X,MSAUVE,MDERNIER_CODE:String;
      XCODE,MDATE:Integer;
      MMODIFICATION,MRESOLUTION:Boolean;
      MLARGEUR,MHAUTEUR,MCOULEUR:Integer;
    toujours sur cette fiche l'appel de la fiche secondaire : FDepenses
    toujours sur cette fiche principale test de la valeur de MMODIFICATION avant de clôturer l'application
    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
    procedure TFAutoP.QuitterClick(Sender: TObject);
    begin
    {Quitte et sauvegarder si modification}
      if MMODIFICATION=True then
      begin
        if MSAUVE_X=MSAUVE_A then MSAUVE_X:=MSAUVE_B
          else MSAUVE_X:=MSAUVE_A;
      DataAuto.DiversTable.Edit;
      DataAuto.DiversTable.FieldByName('SAUVE_X').AsString:=MSAUVE_X;
      DataAuto.DiversTable.FieldByName('SAUVE_A').AsString:=MSAUVE_A;
      DataAuto.DiversTable.FieldByName('SAUVE_B').AsString:=MSAUVE_B;
      {DataAuto.DiversTable.FieldByName('SAUVE_CODE').AsString:=MCODE;}
      DataAuto.DiversTable.Post;
      DataAuto.DiversTable.Active:=False;
      DataAuto.VehiculeTable.Active:=False;
      DataAuto.DepensesTable.Active:=False;
      DataAuto.SuiviTable.Active:=False;
      DataAuto.Auxi_VehTable.Active:=False;
      DataAuto.Auxi_DepTable.Active:=False;
      DataAuto.TypeTable.Active:=False;
      FSauveAuto.ShowModal;
      MMODIFICATION:=False;
      end;
      if MRESOLUTION=True then ChangeResolEcran(MLARGEUR,MHAUTEUR,MCOULEUR)
      else MRESOLUTION:=False;
    Close;
    end;
    maintenant déclaration de la section var pour l'unité associée à FDepenses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      FDepenses: TFDepenses;
      MCODE,MDEPENSE,MAN,MNUMERO,MDER_NUM,MOBSERVAT,MPREMIER_PLEIN:String;
      MT_L_CARBURANT,MT_CARBURANT,MT_ENTRETIEN,MT_REPARATION,MT_CONTROLE:Double;
      MT_ASSURANCE,MT_VIGNETTE,MT_PEAGE,MT_DIVERS,MDATE,MMONTANT:Double;
      ML_PLEIN,MKM_COMPTEUR,MKM_PLEIN,MKM_PAR,MKM_GENERAL,MLITRES_ACHAT:Double;
      MMOY_PLEIN,MMOY_GENE,MDER_DATE,MKM_ACHAT,MKM_CARBURANT:Double;
      XCODE,XNUMERO:Integer;
      XAN,XMOIS,XJOUR,YAN,YMOIS,YJOUR,ZAN,ZMOIS,ZJOUR:Word;
    aucune nouvelle déclaration de MMODIFICATION
    maintenant le morceau de procédure où je modifie la variable MMODIFICATION

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFDepenses.BEnregistrementClick(Sender: TObject);
    begin
    {Enregistrement de la dépense}
    MOBSERVAT:=EObservations.Text;
    BEnregistrement.Visible:=False;
    EnregistreDepense;
    MMODIFICATION:=True;
    end;
    sortie de cette unité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFDepenses.BRetourClick(Sender: TObject);
    begin
    Close;
    end;
    ceci fonctionne sous delphi et xp

    je voudrais reproduire la même chose sous lazarus et linux mais pour l'instant résultat double zéro

    Si je ne déclare ma variable que dans l'unité principale j'ai un défaut à la compilation de l'unité secondaire et si je la redéclare je ne retrouve pas sa valeur dans l'unité principale, alors comment faire pour passer des variables avec leur valeur entre unités d'un même programme.
    J'espère que ces explications seront plus claires.
    A+

  7. #7
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Et si tu déclarais ta variable en public dans le fichier du projet ! le lpr ! tu aurais une variables globale à ton application !

    Je passe par mon datamodule pour faire cela car toute mes unités ont un uses qui pointe dessus. Comme ca, je partage des classes et de variables simple.

    @+

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Salut Chris37,
    Pour la déclaration de ma variable dans le fichier *.lpr je n'ai pas trouvé, faut-il créer une section var ?
    J'ai essayé dans mon datamodule : pas de passage de la variable il y a une form ??
    Alors j'ai essayé dans une autre unité sans form, utilisée par tous mes modules de mon application et là c'est bon étrange mais le résultat souhaité est au rendez-vous.
    Donc merci encore.
    Un autre problème de résolu et un nouveau pas avec lazarus.
    A+

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

Discussions similaires

  1. [Langage/Algorithme] passage de variables entre unites
    Par blondelle dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/08/2012, 15h15
  2. passage de variable entre jsp ?
    Par MAJIK_ENIS dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/04/2006, 11h54
  3. Réponses: 2
    Dernier message: 15/12/2005, 08h43
  4. [C#] Passage de variables entre 2 forms
    Par Tips dans le forum C#
    Réponses: 6
    Dernier message: 06/12/2005, 16h48
  5. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 12h25

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