Accessお手本データベースのホームへ戻る

起動時のオプションを実行時ダイナミックに設定するお手本

 

4-1-1 起動時のバイパスキーを有効/無効にするサンプルデータベース

 

このサンプルデータベースは、Access起動時(スタトアップ)のオプションを実行時ダイナミックに設定します。通常、Access起動時のオプションは、ツールメニューから起動時の設定をクリックして起動時の設定ダイアログを表示させて設定します。このダイアログからは、12種類のオプションを設定することができます。

 

   アプリケーションのタイトル

   アプリケーションのアイコン

   メニューバー

   全てのメニューを表示

   既定のショートカットメニュー表示

   起動時に表示するフォーム/ページの指定

   データベースウィンドウを表示

   ステータスバーを表示

   ショートカットメニューバー

   組み込みツールバーを使用

   ツールバー/メニューを変更

   シートカットキー

 

例えば、起動時に表示するフォーム/ページオプションに、フォームfrmMyAppを設定するとAccess起動時、自動的にfrmMyAppが表示されます。Accessのアプリを本番の環境で運用するときは、データベースの安全性/保全性を考えて、エンドユーザーが直接テーブルを開いてデータを書き替えないようにガードする必要があります。データベースをガードするには、起動時の設定ダイアログから、データベースウィンドウを表示しない、ショートカットキー(f11)を無効にする等のオプションを設定します。この場合、Accessが起動されてもデータベースウィンドウが表示されませんので、エンドユーザーが直接テーブルを開くことができなくなります。

 

ところが、Accessには逃げ道があって、シフトキーを押しながらデータベースをダブルクリックして起動すると、起動時のオプションがバイパスされてしまいます。このバイパスオプションは、本来開発者向けなの機能なのですがエンドユーザーが使用したときは、データベースを破壊する可能性があります。VBAを使用すれば、このバイパスキー(シフトキー)を無効にすることができます。図4-1-1に表示されているフォームのトグルボタンをクリックして、スタートアップ時のバイパスキーを無効にします。フォームを閉じるボタンをクリックして、Accessを終了させます。シフトキーを押しながら、データベース(CH4-1.mdb)をダブルクリックして起動します。起動時のバイパスキーが無効になっていますので、起動時のオプションが適用されてfrmChangePropertyが表示されます。次に、トグルボタンをクリックして、スタートアップ時のバイパスキーを有効にしてAccessを終了させます。データベースをダブルクリックして再起動すると、起動時のオプションがバイパスされてデータベースウィンドウが表示されます。

 

4-1-2 起動時の設定ダイアログから、起動時のオプションを再設定して直接テーブルを開けないようにした例

 

サンプルデータベース(CH4-1.mdb)では、以下のノウハウを習得することができます。

 

◆ エンドユーザーがテーブルを直接開けないようにガードする方法

◆ 起動時のバイパスキーを無効にする方法

◆ 起動時のオプションを実行時、ダイナミックに再設定する方法

 

 

   起動時のバイパスキーを有効/無効にするフォームを作成するには

 

1 Accessを起動して作業フォルダに、新規データベースCH4-1.mdbを作成します。

 

2 データベースウィンドウからフォームをクリックしたら新規作成ボタンをクリックします。フォームの新規作成ダイアログが表示されたら、一覧からデザインビューを選択してOKボタンをクリックします。

 

3 フォームのデザインビューが表示されたら、ツールボックスから、トグルボタンのアイコンをクリックしてフォーム中央に作成します。トグルボタンのプロパティを表示させたら、コントロール名をtglAllowBypassKeyに書き替えます。既定値には、Trueを設定します。標題は、実行時ダイナミックに設定します。次に、ツールボックスからテキストボックスのアイコンをクリックして、トグルボタンの右に作成します。テキストボックスのプロパティを表示させたら、コントロール名をcmdQuitに書き替えます。最後に、ツールボックスからラベルのアイコンをクリックしてラベル1とラベル2を作成します。ラベルの標題は、表4-1-1のように設定します。

 

4-1-1 コントロールのプロパティ

コントロールの種類

プロパティ

トグルボタン

名前

tglAllowBypassKey

既定値

True

標題

実行時設定

コマンドボタン

名前

cmdQuit

ピクチャ

ビットマップ

ピクチャタイプ

埋め込み

ラベル1

標題

Startup

ラベル2

標題

トグルボタンをクリックしてスタートアップ時のバイパスキー(Shift Key)を有効/無効にすることができます。

 

無効に設定したときは、Shift Keyを押してMDBを開いてもスタートアッププロパティがバイパスされません。

 

 

4-1-3 フォームにトグルボタン、コマンドボタン、ラベル1,2を作成した例

 

4 メニューからコードのアイコンをクリックして、フォームモジュールを表示させます。 CH4-1.mdbを開いてfrmChangePropertyのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト4-1-1を参照してください。また、CH4-1.mdbのモジュールからbasChangeProperty, basMyLibもインポートしておいてください。フォームをfrmChangePropertyの名称で保存します。

 

5 フォームfrmChangePropertyをビューモードで開いたら、トグルボタンをクリックして“スタートアップ時のバイパスキー(無効)”にします。フォームを閉じるボタンをクリックして、Access を終了します。起動時のバイパスキー(シフトキー)を押しながら、データベースCH4-1.mdbをダブルクリックします。起動時のバイパスキーが無効に設定されているため、起動時のオプションが適用されてfrmChangePropertyが表示されます。スタートアップ時のバイパスキーを有効にしたときは、シフトキーを押してデータベースをダブルクリックすると、起動時のオプションがバイパスされてデータベースウィンドウが表示されます。

 

6 起動時のバイパスキーオプションが正常に動作することを確認したら、Accessを終了させます。

 


Sub cmdQuit_Click()イベントの処理

このイベントは、フォームを閉じるコマンドボタンをクリックしたときに実行されます。このイベントでは、DoCmdQuitメソッドでAccessのアプリを終了します。

 

 

Sub Form_Open()イベントの処理

このイベントは、フォームが開かれたときに実行されます。このイベントでは、起動時のオプションAllowBypassKeyの値を取得して、トグルボタンの標題に表示します。db.Properties("AllowBypassKey")では、AllowBypassKeyの値(True/False)を取得して、トグルボタンに設定します。データベースにAllowBypassKeyプロパティが登録されていないときはエラーが発生して、Err_Form_Openに制御が渡ります。エラー処理ルーチンでは、Select Case…End Selectでエラーコードを調べて、プロパティ未登録のエラーならエラーを無視して処理を続行します。その他のエラーが発生したときは、エラーメッセージを表示して終了します。

 

 

Sub tglAllowBaypassKey_AfterUpdate()イベントの処理

このイベントは、トグルボタンをクリックしたときに実行されます。このイベントでは、ChangeProperty_FS()関数でAllowBypassKeyのプロパティを書き替えます。この関数は、basChangePropertyモジュールに登録されていますので参照してください。ChangeProperty_FS()関数には、プロパティ名、プロパティのデータ型、プロパティの値を引数として指定します。

 

   strPropertyName – プロパティ名を指定します(例:AppTitle, AppIcon,…

   intPropertyType プロパティのデータ型を指定します(例:dbText, dbBoolean,…

   varPropertyValue – プロパティの値を指定します 

 

例えば、AllowByPassKeyのプロパティを”True”に設定するには

 

              ChangeProperty_FS(“AllowBypassKey”, dbBoolean, True)

 

のように指定します。また、アプリケーションのタイトル(AppTitle)プロパティを設定するには、

 

              ChangeProperty_FS(“AppTitle”, dbText, “My App Title”)

 

のように指定します。

 

プロパティを変更したら、トグルボタンのCaption(標題)に、AllowBypassKeyの値を表示して終了します。トグルボタンの標題には、“スタートアップ時のバイパスキー(有効/無効)”のように表示されます。

 

リスト4-1-1 frmChangePropertyのフォームモジュール

Option Compare Database

Option Explicit

 

Private Sub cmdQuit_Click()

  DoCmd.Quit

End Sub

 

Private Sub Form_Open(Cancel As Integer)

  Dim db As DAO.Database

 

  Call SetAppTitle_FS("Change Property (C) " _

    & Year(Date) & " by Akio Kasai")

 

  On Error GoTo Err_Form_Open

  Set db = CurrentDb

  Me.tglAllowBaypassKey = db.Properties("AllowBypassKey")

 

Exit_Form_Open:

  Me.tglAllowBaypassKey.Caption = "スタートアップ時のバイパスキー(" _

    & IIf(Me.tglAllowBaypassKey, "有効", "無効") & ")"

  Exit Sub

 

Err_Form_Open:

  Select Case Err.Number

    Case 3265

      Err.Clear

    Case Else

      MsgBox Err.Description, vbInformation, Err.Number

      Resume Exit_Form_Open

  End Select

 

End Sub

 

Private Sub tglAllowBaypassKey_AfterUpdate()

  With Me

    If ChangeProperty_FS("AllowBypassKey", _

      dbBoolean, _

      .tglAllowBaypassKey) = True Then

      .cmdQuit.SetFocus

      .tglAllowBaypassKey.Caption = "スタートアップ時のバイパスキー(" _

        & IIf(.tglAllowBaypassKey, "有効", "無効") & ")"

    End If

  End With

End Sub

 

 

 

リスト4-1-2 basChangePropertyモジュールのChangeProperty_FS()関数

Public Function ChangeProperty_FS( _

  strPropertyName As String, _

  intPropertyType As DAO.DataTypeEnum, _

  varPropertyValue As Variant) _

  As Boolean

 

  On Error GoTo ChangeProperty_FS_Err

 

  Const conPropNotFoundError = 3265

 

  Dim db As DAO.Database

  Dim prp As DAO.Property

 

  Set db = CurrentDb

  db.Properties.Delete strPropertyName

  Set prp = db.CreateProperty( _

    strPropertyName, _

    intPropertyType, _

    varPropertyValue, _

    True)

  db.Properties.Append prp

  ChangeProperty_FS = True

 

ChangeProperty_FS_Exit:

  Set prp = Nothing

  Set db = Nothing

  Exit Function

 

ChangeProperty_FS_Err:

  Select Case Err.Number

    Case conPropNotFoundError

      Err.Clear

      Resume Next

    Case Else

      MsgBox Err.Description, vbInformation, Err.Number

      Resume ChangeProperty_FS_Exit

  End Select

 

End Function

 

 


 

Tip

関数の引数の定義にEnumを使用すると便利:

 

ChangeProperty_FS()関数の引数2のデータ型に、DAO.DataTypeEnumを指定すると関数の引数を入力するとき、定数の候補が一覧に表示されます。

 

Public Function ChangeProperty_FS( _

  strPropertyName As String, _

  intPropertyType As DAO.DataTypeEnum, _

  varPropertyValue As Variant) _

  As Boolean

 

 

4-1-4 ChangeProperty_FS()関数の引数2の候補が一覧に表示される

 

 

Tip

AllowBypassKeyプロパティ使用上の留意点:

 

本番で稼動しているデータベースのAllowBypassKeyプロパティをFalseに設定すると、シフトキーを押してデータベースをダブルクリックしても起動時のオプションがバイパスされません。つまり、データベースをメンテできない状態になります。

 

開発者が、データベースをメンテするためには、本番用と開発用の2個のデータベースを用意すると便利です。開発用は、*.MDBの形式、本番用は、*.MDEの形式で作成して高速化します。また、メインフォーム(起動時のオプションで指定したフォーム)のOnLoadイベントにAllowBypassKeyプロパティを設定するコードを追加します。

 

ChangeProperty_FS()関数の引数3には、AllowBypassKeyプロパティの値(True/False)を指定します。Right(CurrentProject.FullName, 3) = "mdb"では、カレントデータベースの拡張子(mdb/mde)を調べてmdbなら”True”mdeなら”False”を返します。これにより、本番のmdeは自動的に起動時のバイパスキーが無効となり、データベースがガードされます。開発用は、起動時のバイパスキーが有効ですからメンテ可能です。尚、開発用のmdbをメンテするときは、本番のmdeから全てのテーブルをインポートしてデータを同期させます。

 

 

  fOK = ChangeProperty_FS("AllowBypassKey", dbBoolean, _

            Right(CurrentProject.FullName, 3) = "mdb")

 

 

 

 

ChangeProperty_FS()関数では、AllowBypassKeyオプションの他に、表1-15-2に示すオプションのプロパティを変更することができます。

 

4-1-2 起動時に設定可能なオプションの一覧

オプション名

値(注)

内容

AppTitle

文字列

アプリケーションのタイトル
ChangeProperty_FS(“AppTitle”,dbText,”My App Title”)

AppIcon

文字列

アプリケーションのアイコン(パス名)

 

StartupMenuBar

文字列

デフォルトのメニューバー

 

AllowFullMenus

True/False

組み込み済みのメニューバー表示

 

AllowShortcutMenus

True/False

組み込み済みのショートカットメニュー表示

 

StartupForm

文字列

アプリ起動時に表示するフォーム/データページ

 

StartupShowDBWindow

True/False

データベースウィンドウを表示

 

StartupShowStatusBar

True/False

ステータスバーの表示

 

StartupShortcutMenuBar

文字列

ショートカットメニューバーを全てのフォーム/レポートで使用

 

AllowBuiltInToolbars

True/False

組み込み済みのツールバーを表示

 

AllowToolbarChanges

True/False

ツールバーの変更を許可

 

AllowBypassKey

True/False

シフトキーを押してデータベースを開いたとき、起動時のオプションをバイパス

ChangeProperty_FS(“AllowBypassKey”,dbBoolean,True)

AllowBreakIntoCode

True/False

CTRL+BREAKキーを押したときに実行中のコードを中断する

 

 

注)プロパティの値が文字列のとき、ChangeProperty_FS()関数の引数2には、dbTextを指定します。また、プロパティの値がTrue/Falseのときは、dbBooleanを指定します。

 

例1:ChangeProperty_FS(“AppTitle”, dbText, ”My App Title”)

2ChangeProperty_FS(“AllowBypassKey”, dbBoolean, True)

 

ChangeProperty_FS()関数では、Access 2000の起動時のオプションを変更することができますが、ApplicationSetOptionメソッドを使用するとAccess のグローバルオプションを実行時に変更することができます。(一般に、Access のグローバルオプションは、Accessのツールメニューからオプションをクリックして、オプションのダイアログから設定します。)

 

4-1-3 Access のグローバルオプションの一部

オプション名1

内容

Refresh Interval (sec)

数値 (0-32766)

再表示の間隔(秒)

 

Number of Update Retries

数値 (0-10)

レコードがロックされているときの再試行回数(.mdbのみ有効)

 

ODBC Refresh Interval (sec)

数値 (1-32766)

ODBCの再表示間隔(秒)

 

Update Retry Interval (msec)

数値 (1-1000)

レコードがロックされているときの再試行間隔(ミリ秒)
(.mdb
のみ有効)

 

Default Open Mode for Databases

数値

0=共有

1=排他

既定のデータベースを開くモード(.mdbのみ有効)

 

 

Default Record Locking

数値

0=ロックしない

1=全てのレコード

2=編集中のレコード

既定のレコードロックの種類(.mdbのみ有効)

 

Application.SetOption "Default Record Locking",2

Use Row Level Locking

True/False

レコード単位でロック(.mdbのみ有効)

 

 

例えば、既定のレコードロックの種類を“2=編集中のレコード”に変更するには

 

Application.SetOption "Default Record Locking",2

 

のように記述します。オプションを取得するには、

 

Debug.Print  Application.GetOption("Default Record Locking")

 

のようにGetOptionメソッドを使用します。

ダウンロード (CH4-1.lzh)
Accessお手本データベースのホームへ戻る