8

私が取り組んでいるこの Access フォームには、Form_Load イベントで別のフォームから値を取得するグローバル変数があります。なんらかの理由で、変数は「値を失います」(= "" になります) 時間が経過するか、何らかのイベントが発生した後です。この動作の引き金となるものに特に気付くことはできませんでした。フォームでしばらく「非アクティブ」になった後、グローバル変数はリセットされますか?

私が話しているグローバル変数を設定する方法は次のとおりです。

Private Sub Form_Load()       
    '...
    Set prev_form = Form_Identification.Form
    PasswordSybase = prev_form.Password.Value & vbNullString
    UserSybase = prev_form.UserID.Value & vbNullString
    '...
End Sub
4

5 に答える 5

6

重要な追加要素を提供するため、訪問者がこの投稿を見てくれることを願っています。

変数をグローバルに宣言しても、フォーム モジュールでその変数の値を設定すると、フォームをアンロードするとその値が失われるように見えます。

解決策(私の場合)は、次のものを置き換えるのと同じくらい簡単でした:

アンロードミー

...と...

Me.Hide

そのコード モジュールで設定した変数 (およびオブジェクト) は、アプリケーション インスタンスの存続期間全体にわたって値を保持していました。

于 2016-05-18T17:26:14.030 に答える
2

これが役立つかもしれません: https://accessexperts.com/blog/2011/01/12/multi-session-global-variables/ Juan Soto は、ローカル テーブルを使用して変数を保持する方法と、必要に応じて変数を呼び出す方法について説明しています。TempVars はオプションではないため、2000 年の目的に役立つ可能性があります。UID と PWD が保持されないように、データベースの「クローズ時に」変数をいつでも削除できます。

于 2014-12-23T04:06:05.790 に答える
1

「偽の」グローバル変数を作成するには、

  • フォームの作成 (例: frmGlobal という名前)
  • フォームが常に開いているが非表示であることを確認してください
  • 必要なグローバル変数ごとに TextBox を作成します (例: tVar1)
  • コードで、たとえば Form_frmGlobal.tVar1 のように参照します。

欠点は、バインドされていないテキスト ボックスでは、必要な特定のデータ型が得られない可能性があることです。

それを回避する2つの方法は

  • コードで、Clng(Form_frmGlobal.tVar1) などのグローバル変数を参照するときに、テキスト ボックスをデータ型に明示的に変換します。

  • もう1つのオプションは、1行のテーブルを作成し、非表示のフォームのテキストボックスをテーブルにバインドすることです。これにより、データ型が強制されます

この方法の利点は、セッション間の永続的なストレージに使用できることです 注意: このテーブルが、フロント エンド データベース ファイル内の 1 人のユーザーに対してのみローカルであることを確認してください (複数の理由でバック エンド データベースに配置したくない) -ユーザー同士で上書きし合う)。これは、フロントエンドとバックエンドが分離されたデータベースを使用しており、フロントエンドが各ユーザーのワークステーションに分散されていることを前提としています。

于 2013-07-13T09:04:20.230 に答える
0

そのステートメントには、それがグローバル変数であることを示すものは何もありません。次のように記述して、モジュール内の ALL Subs/Functions の上および Options Compare ステートメントの下にグローバル変数を設定します。

PUBLIC X as string

他の変数は、サブルーチンまたは関数が完了するまで有効です。

また、グローバル変数は PROPER MODULE で宣言する必要があります。フォームのモジュールで宣言することはできません。

于 2013-07-11T19:40:06.737 に答える