8
votes

La variable globale perd sa valeur

sur ce formulaire d'accès, je travaille sur j'ai une variable globale qui prend sa valeur d'une autre forme sur son événement Form_load. Pour une raison quelconque inconnue, la variable "perd sa valeur" (devient = "") après quelques écoulements de temps ou un événement survient. Je n'ai pas pu remarquer quoi que ce soit en particulier qui déclenche ce comportement. Les variables globales sont-elles réinitialisées après un certain temps de "inactivité" sur la forme?

Voici comment je définit les variables globales dont je parle: xxx


5 Réponses :


0
votes

Je ne vois rien dans cette déclaration qui me dit que c'est une variable globale. Vous définissez des variables globales au-dessus de tous les sous-marins / fonctions et ci-dessous une instruction Comparaison des options dans un module, en indiquant: xxx

Toute autre variable est seulement bonne jusqu'à ce que le sous ou la fonction soit terminé.

En outre, les variables globales doivent être déclarées sur un module approprié. Vous ne pouvez pas les déclarer sur le module d'un formulaire.


3 commentaires

Ce mot clé "global" ne semble pas exister. Je l'ai mis au sommet et l'a déclarée comme telle: DIM PasswordSyBase en tant que chaîne


Essayez Public PasswordSyBase en tant que chaîne. Laisser sortir le sombre


Global est un héritage des versions antérieures de VB et est remplacée par public . Cela l'accepte toujours (capitalisant le G si vous le tapez en minuscules) mais si vous cliquez sur ce mot et appuyez sur F1, il vous amène à l'aide pour la relevé public .



9
votes

une solution alternative (seulement 2007 et à partir de 2007) J'ai commencé à utiliser est tempvars code> au lieu de globaux dans la situation impair, je "avait besoin" quelque chose de global. C'est une collection et persiste pendant toute la durée de l'application que si vous le libérez explicitement. Donc, dans certains cas, je sens que c'est plus utile que les globaux et dans certains cas pire.

TempVars.Add myVarName, myVarValue ' To initialize
TempVars.Item(myVarName) = newVarValue ' To reference and assign a new value
TempVars.Remove(myVarName) ' To release


2 commentaires

J'ai suscité mais je ne peux pas accepter car je dois utiliser Access 2000 (désolé je ne l'ai pas spécifié plus tôt). Grande réponse pour 2007+ cependant. Je vais certainement garder une note mentale de cela.


Poste ancien mais toujours utile, Tempvars persistent également après application.Quit (tous ces événements de déchargement: d) Mais avant la fermeture complète que les globaux ne le font pas.



1
votes

Vous pouvez créer une "fausse" variable globale par

  • Création d'un formulaire (E.G. Nommé FRMGLOBAL)
  • Assurez-vous que le formulaire est toujours ouvert mais caché
  • Créez une zone de texte pour chaque variable globale que vous souhaitez (par exemple TVAR1)
  • dans votre code, référence selon E.G. Form_frmglobal.tvar1

    L'inconvénient est qu'une zone de texte non liée peut ne pas vous donner un type de données spécifique que vous souhaitez

    Les deux manières autour de cela sont

    • Dans votre code, convertissez explicitement la zone de texte au type de données lorsque vous référencez la variable globale. E.g clng (form_frmglobal.tvar1)

    • Une autre option consiste à créer une table à une ligne et à lier vos boîtes de texte sur votre formulaire masqué à la table, de sorte que vos types de données sont appliqués

      Un bonus de cette méthode est que vous pouvez utiliser pour le stockage persistant entre les sessions CAVEAT: Assurez-vous que cette table est locale à un seul utilisateur uniquement, dans le fichier de base de données avant (ne veut pas la mettre dans la base de données arrière en raison des multi-utilisateurs qui s'écrochaient mutuellement). Cela suppose que vous utilisez des bases de données séparées de l'extrémité avant + de l'extrémité arrière, la distribution de l'extrémité avant de chaque poste de travail de l'utilisateur.


0 commentaires

2
votes

Cela peut aider: https://accessexperts.com/blog/2011/01/ 12 / Multi-session-Global-Variables / Juan Soto explique comment utiliser une table locale pour garder les variables et comment les appeler en cas de besoin. Cela peut servir votre objectif en 2000 puisque Tempvars n'est pas une option. Vous pouvez toujours supprimer les variables "à proximité" de la base de données de sorte que UID et PWD ne soient pas conservés.


0 commentaires

6
votes

J'espère que les visiteurs voient ce post, car il fournit une pièce supplémentaire importante.

Même si vous déclarez une variable globale, il apparaît que - dans le cas où vous définissez la valeur de cette variable dans un module de formulaire - cette valeur est perdue lorsque vous déchargez le formulaire.

La solution (dans mon cas) était aussi simple que de remplacer:

Décharger moi

... avec ...

moi.hide

Les variables (et les objets) que j'ai définies dans ce module de code ont ensuite conservé leurs valeurs via toute la durée de vie de l'instance d'application.


1 commentaires

Merci pour cela - je fermais ma forme principale manuellement pendant les tests (quelque chose de régulier ne peut pas faire) et je me demandais pourquoi mes variables mondiales ont continué à désapprendre. Sera plus prudent avec cela à l'avenir!