Microsoft Access Club >Access裏技Tips >このページ >次頁 < 前項 サイト内検索


半角英数字でログインする : Access裏技Tips



セキュリティを強化した場合、ログイン画面を介してデータベースにアクセスすることがあります。 ここでは、ログイン画面入力を半角の英数字に限定する技を紹介します。

半角英数字に入力を限定する

  1. パスワードテーブル(tbl_sample)に、ID、PassWord、社員名(全てテキスト型)フィールドを作成します。
  2. このテーブルに、ログインIDとパスワードを格納しています。
  3. ログインフォーム(frm_sample)を作成します。
  4. フォーム上にIDを入力するtxtIDテキストボックス、パスワードを入力するtxtPassWordテキストボックスを作成します。
  5. これらテキストボックスの更新前処理イベントに、半角英数字のチェックを行うFunctionプロシージャHankakuCKを記述します。

パスワードテーブルの作成

  1. パスワードテーブルを作成します。
  2. このテーブルに、ID、PassWord、社員名のテキスト型フィールドを作成します。
  3. PassWordフィールドの定型入力に"パスワード"を設定します。

今回のおすすめポイント

定型入力のパスワード設定

テーブルプロパティで定型入力にパスワード設定を行うことができます。但し、フィールドのデータ型がテキスト型の場合だけです。 テーブルを開くと、パスワード設定を行っているフィールドのデータは、****で表示されますのでセキュリティ強化になります。

Functionプロシージャ HanKakuCK の作成

Functionプロシージャ HanKakuCK を作成します。

Function HankakuCK(varValue As Variant) As Boolean

    Dim varCon As Variant
    Dim CK As Boolean
    Const Teisu = 8 ' --- A
    
    varCon = StrConv(varValue, vbFromUnicode) ' --- B
    CK = varValue Like "*[あ-ん]*" ' --- C
        
    If CK = False Then
        If LenB(varCon) <= Teisu Then ' --- D
            HankakuCK = True
        Else
            MsgBox Teisu & "文字以内で入力して下さい。", vbCritical
            HankakuCK = False
        End If
    Else
        MsgBox "半角の英数字で入力して下さい。", vbCritical
        HankakuCK = False
    End If
    
End Function
解説
  1. 定数Teisuを宣言します。これは、入力限度文字数として利用します。
  2. StrvarConv関数を用いて、引数varValueをUnicodeからシステムの既定のコードに変換します。
  3. Like演算子を用いて、パターンマッチングを行っています。ひらがな、カタカナが含まれている場合はTrue、含まれていない場合はFalseを返します。
  4. LenB関数を用いて変数varConのバイト数を求めます。全角なら2バイト、半角なら1バイトを返します。
今回のおすすめポイント

StrvarConv関数とLenB関数

Uncodeが採用されていますので、そのままLenB関数を用いた場合、全角アも半角アも2バイトを返します。求めるところは、全角なら2バイト、半角なら1バイトです。これを実現するためには、StrvarConv関数のvbFromUnicode定数を用いて、既定のコードに変換する必要があります。

□はみ出しコラム
Option Compare ステートメント

一般的に、モジュールを開くと上段に Option Compare Database と記述されてします。これは、文字列データの既定の比較方法を設定するものです。つまり、"Databaseの設定に従う"と言う意味です。 日本ではTextモードが既定ですから、大文字と小文字、文字幅、カタカナとひらがなを区別しません。よって、*[あ-ん]* の意味するところは、文字列中にカタカナ、ひらがなを含むものと、ということになります。

ログインフォームの作成

  1. 非連結のログインフォームを作成します。
  2. テキストボックスをID用、パスワード用と2個作成します。

フォームイベントの宣言セクションに変数の定義

フォームイベントの宣言セクションに変数を定義します。

Option Compare Database
Option Explicit

Dim varEnterPass As Variant ' --- A
解説
  1. 宣言セクションに定義した変数はフォームを閉じるまで値を保持します。
  2. テキストボックスtxtIDの更新前処理イベントプロシージャを作成します。

テキストボックスtxtIDの更新前処理イベントプロシージャの作成

テキストボックスtxtIDの更新前処理イベントプロシージャを作成する。

Private Sub txtID_BeforeUpdate(Cancel As Integer)

    If HankakuCK(Me.txtID) = False Then ' --- A
        Cancel = True ' --- B
        Me.txtID.DefaultValue = "" ' --- C
        End ' --- D
    End If

End Sub
解説
  1. テキストボックスtxtIDの値をFunctionプロシージャHankakuCKの引数に設定します。HankakuCKの戻り値がFalseであれば、以下の処理に進みます。
  2. 引数CancelにTrueを設定し、処理を中止します。(Endステートメントがあるので省略も可)
  3. テキストボックスtxtIDのDefaultValueプロパティに、長さ0の文字列("")を代入します。
  4. Endステートメントで、即座に処理を終了します。
今回のおすすめポイント

DefaultValueプロパティ

更新前処理イベントでは、値の代入ができません。連結フォームであればUndoメソッドを利用することもできますが、非連結の場合、DefaultValueプロパティで処理を代行させます。

テキストボックスtxtPassWordの更新前処理イベントプロシージャの作成

テキストボックスtxtPassWordの更新前処理イベントプロシージャを作成します。

Private Sub txtPassWord_BeforeUpdate(Cancel As Integer)

    If HankakuCK(Me.txtPassWord) = False Then ' --- A
        Cancel = True
        Me.txtPassWord.DefaultValue = ""
        End
    End If

    If Me.txtPassWord = varEnterPass Then
        DoCmd.Close
        MsgBox "ログインOK"
    Else
        MsgBox "パスワード相違です", vbCritical
        Me.txtID.DefaultValue = ""
        Me.txtPassWord.DefaultValue = ""
    End If

End Sub
解説
  1. テキストボックスtxtPassWordの値をFunctionプロシージャHankakuCKの引数に設定します。HankakuCKの戻り値がFalseであれば、以下の処理に進みます。

テキストボックスtxtIDの更新後処理イベントプロシージャの作成

テキストボックスtxtIDの更新後処理イベントプロシージャを作成します。

Private Sub txtID_AfterUpdate()

    varEnterPass = DLookup("PassWord", "tbl_sample", _
				"[ID]='" & Me.txtID & "'") ' --- A
        
End Sub
解説
  1. DLookup関数で、変数varEnterPassにテキストボックスtxtIDに入力された値をもとに、tbl_sampleテーブルのIDフィールドに対応するPassWordフィールドの値を代入します。

動作確認

  1. デザインビューからフォームビューに切り替えます。

  1. txtIDフィールドに あくせす とひらがなで入力すると、メッセージボックスが開きます。

  1. txtIDフィールドに 1234 と数字で入力します。
  2. txtPassWordテキストボックスに abcd と入力します。
  3. Enterキーをクリックすると、ログインOKの下図メッセージボックスが開きます。

関連ページ

ページの先頭へ 前ページへ戻る

 


半角英数字でログインする : Access裏技Tips


 

-Microsoft Access Club-

アダルト・ゲーム配信可能なPLESKパネル付属の専用・共有レンタルサーバーを提供しています。
アダルトやゲーム配信が可能です。
全専用/共有レンタルサーバーにPLESKパネルをインストール済み。