パソコン情報

【Access】accdeにコンパイルしてもテーブルを見られてしまうので、SHIFTキーを無効にする

 

データベースソフトのマイクロソフトアクセス(以下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の仕様であるなら従うしかありません。