2011/11/19

access2010 ユーザ毎にあれこれしたいとき

2007-2010形式だとユーザーと権限の管理をどうするかって。
各フォーラムでもけっこうあるあるトピックだし、できれば以前のファイル形式をを使わないでおきたいかなと思う次第。ないものは仕方がない、似たものを実装するしかないわけで。
起動時にユーザ名とパスワードを照合するってことは、ユーザ情報テーブルからユーザ名 And パスワードを条件にすればよいからまぁよいかなと思う。あとはフォームであるとかコマンドボタンの制御をどうしていくかなって感じ。
そこで、例としてコマンドボタンの使用可否をユーザ毎に操作してみようと考えた。
できるだけマクロで、定義域集計関数を使わずに、できるだけAccess2010もしくはAccess2007の機能を使いつつ。
なにはともあれ、こんな感じのコマンドボタンを制御していくことにする。名前は判りやすいようにしているけれども、見ての通りビット演算でさらっと処理予定。
ユーザ情報のテーブル定義はこんな感じ。
ここでは、集計フィールドで判定用の値を計算している。Access2007の場合は、クエリで演算するって感じになりましょうか。
テーブルを開いた感じだとこうなる。要はビットそれぞれに判定情報を置いておくという感じで保存されるようになっている。集計フィールドが便利なのでチェックボックスのフィールドから判定用の値を作っているだけ。独自に計算できるならこれらチェックボックスのフィールドは使わなくてもいい。
ログインダイアログは簡素にこんな感じで。
コンボボックスのソースにユーザ名と判定用の値を含めておく。
以降の処理では一時変数/TempVarで情報を持ちまわるようにしておく。CLngで変換しているところがあるけどなくってもよかったはず。どっちみちvariantだし。エラー処理はお好みでどうぞ。
で、ユーザ選択後に開くフォーム:フォーム1のイベントでコマンドボタンを制御。
プロパティの設定マクロアクションで使用可能プロパティを変更。ビット演算はVBAの人に任せないとなので、ユーザ定義関数を設定。
Function Decision(DecisionNum As Long, DecisionKey As Long) As Boolean
    Decision = (DecisionNum And DecisionKey) = DecisionKey
End Function
で、ログインせずにフォームを開くと、
ボタン押下でログインダイアログを開く段取り。
TempVars.RemoveAllしてしまってるので、他用途でTempVarを使用している場合適宜修正が必要。フォームを閉じてまた開くというアクションも必要に応じて修正ということで。
押下して、
ログインボタン押下で、
 ログオフすると、
 あとは、起動時の設定なりAutoExecで。

0 件のコメント: