データベースソフトのマイクロソフトアクセス(以下Access)を配布するのに、accdeにコンパイルしました。
コンパイルしたのに、Shiftキーを押しながら起動すると、フォームの編集やVBAの編集などはできないものの、
ココに注意
テーブルの中のデータは見られてる状態
なのです。
コンパイルしたのだから、データも見られたくないものです。
考えた挙句に、Shiftキーを無効にするという方法を見つけました。
コンパイルしてもテーブルは見れる?
コンパイルしてから、Shiftキーを押しながら起動すると、Accessの編集モードのような画面になり、しっかりとテーブル内のデータも見る事ができます。
ココがダメ
配布用としてコンパイルした訳ですが、テーブル内が見えるのは困る
Accessの仕様じゃ仕方ないのですが、なんでコンパイル後なのにデザインモードのような起動の仕方ができるのかが疑問です。
色々と調べてみましたが、テーブルを隠すような機能やコンパイル方法は無いようです。
もちろん、隠しオブジェクトを使って一時的に隠すような事はできますが、チェックを操作すれば簡単にテーブルを見られるような状態になります。
Shiftキーを無効にしてロックする
調べると、Shiftキーを無効にしてロックをかける方法があるようです。
ココがポイント
コンパイル前に、Shiftキー無効にしてコンパイルすればテーブルを見られなくて済みますね
今回は、とりあえず、フォームにShiftキー無効ボタンと有効ボタンを設置して切り替える方法をやって見ました。
実際は、フォームにロックと解除をボタンとして設置していては何の意味も無くなってしまいますが、実験なのでボタンにしてみました。
VBAコード
まず2つのVBAコードをモジュールにします。
ちなみに、このコードは、マイクロソフト様のサイトより丸パクリになります。
Function ap_DisableShift() 'This function disable the shift at startup. This action causes 'the Autoexec macro and Startup properties to always be executed. On Error GoTo errDisableShift Dim db As DAO.Database Dim prop as DAO.Property Const conPropNotFound = 3270 Set db = CurrentDb() 'This next line disables the shift key on startup. db.Properties("AllowByPassKey") = False 'The function is successful. Exit Function errDisableShift: 'The first part of this error routine creates the "AllowByPassKey 'property if it does not exist. If Err = conPropNotFound Then Set prop = db.CreateProperty("AllowByPassKey", _ dbBoolean, False) db.Properties.Append prop Resume Next Else MsgBox "Function 'ap_DisableShift' did not complete successfully." Exit Function End If End Function
Function ap_EnableShift() 'This function enables the SHIFT key at startup. This action causes 'the Autoexec macro and the Startup properties to be bypassed 'if the user holds down the SHIFT key when the user opens the database. On Error GoTo errEnableShift Dim db as DAO.Database Dim prop as DAO.Property Const conPropNotFound = 3270 Set db = CurrentDb() 'This next line of code disables the SHIFT key on startup. db.Properties("AllowByPassKey") = True 'function successful Exit Function errEnableShift: 'The first part of this error routine creates the "AllowByPassKey 'property if it does not exist. If Err = conPropNotFound Then Set prop = db.CreateProperty("AllowByPassKey", _ dbBoolean, True) db.Properties.Append prop Resume Next Else MsgBox "Function 'ap_DisableShift' did not complete successfully." Exit Function End If End Function
そして、ボタンに設置しました。
下記がロックをかける方ですね。
Private Sub ロック_Click() ap_DisableShift MsgBox "SHIFT編集モードがロックされました。再起動するとロックされています。" End Sub
ロックを解除する方
Private Sub 解除_Click() ap_EnableShift MsgBox "SHIFT編集モードがロック解除されました。" End Sub
一旦データベースを閉じて開くとShiftキーの設定が反映されます。
まとめ
Shiftキーを無効にすることで、コンパイル後のAccessからテーブルを見られることができなくすることができました。
しかし、知っている人が触れば完全ではないようなので、サーバーに接続する時だけ、リンクテーブルを貼りなおすような方法もあるようです。
本当は、コンパイル後は編集もテーブルも見られないようにしてくれていれば、今回のようなボタンにShiftキー無効有効などという作業は必要なくなるのですけどね。
マイクロソフト様のAccessの仕様であるなら従うしかありません。