データ入力ツール⑤(ExcelでRDBその24)

ExcelRDB(リレーショナルデータベース)を操作してみようという連載のその24です。前回の記事はこちらです。

hirocom777.hatenadiary.org

データベースの制約

前回は入力規制に対応しました。これで多少は使いやすくなったと思います。

今回はデータベースに設定される制約について対応しようと思います。でも、制約って何なんでしょうか? ここで言うところの制約とは、データベースに入力されるデータに制約条件を付けることです。今回は、以下の制約について取り上げます。

  • NOT NULL制約

NULLとは、データが何も入っていない空の状態です。NOT NULL制約を指定すると、そのカラムはNULLの状態が禁止されます。

  • 一意制約

データベースの指定したカラムに同じデータが複数あってはならない(一意と言う)制約です。

実をいいますと、主キーに設定されたカラムは自動的に一意制約とNOT NUll制約が設定されます。これを主キー制約と言ったりします。今回は、データを入力して登録する際に主キーについて内容を確認して2つの制約が守られているか確認するようにしたいと思います。

機能の実現方法

機能の実現方法ですが、登録ボタンが押された際に主キーの項目について以下の処理を追加すればいいいと思います。

  • NOT NULL制約 ⇒ 登録時にデータが入力されているかを確認する。

  • 一意制約 ⇒ 登録時に指定された値がデータベースに入力されていないかSQLで検索する。

コードを書いてみましょう。

'データ登録を実行します
Public Sub cmdDataEntry_Click()
Dim inputData() As Variant
Dim i As Long
  If MsgBox("データを登録します", vbYesNo) = vbNo Then Exit Sub
  Dim db As New clsAccessDbase
  db.dbFileName = Me.Range("FileName").Value
  db.dbTableName = Me.Range("TableName").Value
  '登録データを設定します
  ReDim inputData(UBound(db.dbFieldList))
  For i = 0 To UBound(inputData)
    With Me.Range("columnList")
      '主キーの制約を確認します。
      If .Offset(1 + i, 2) = "主キー" Then
        If .Offset(1 + i, 3) = "" Then
          MsgBox "主キーが指定されていません"
          Exit Sub
        End If
        Dim sqlCmd As String
        sqlCmd = .Offset(1 + i, 0) & " = " & .Offset(1 + i, 3)
        If db.SelectRecord(sqlCmd) <> 0 Then
          MsgBox "主キーがユニークではありません"
          Exit Sub
        End If
      End If
      inputData(i) = .Offset(1 + i, 3)
    End With
  Next
  'データを登録します
  db.AddRecord inputData
  Me.Range("RecordCount").Value = db.dbRecordCount
  MsgBox "データを登録しました"
End Sub

主キーが指定されていない場合は「主キーが指定されていません」となって登録作業を中断します(NOT NULL制約)。また、SQLで検索して過去に登録されている値であった場合には「主キーがユニークではありません」となって登録作業を中断します(一意制約)。クラスモジュールのSelectRecordメソッドを使うと、WHERE句で指定した条件で検索した結果のレコード数を返しますので、この機能を使用しています。

動かしてみる

主キーが設定されているファイルを使って動作確認してみましょう。主キーを設定してあるサンプルファイルを用意しました。ので開いてデータ入力してみます。

最初に主キーに1を設定してデータを入力してから、主キーを空欄にして登録してみると・・・

次に主キーを1にしてデータ登録しようとすると・・・

主キーを2にして登録してみると・・・

ちゃんと登録できました!!

今回のプログラムとサンプルファイルは、以下からダウンロードできます。興味のある人は試してみてください。(サンプルなので実務には使用しないでください!!)

24_データ入力ツール⑤.md - Google ドライブ

次回は外部キー制約

いかがでしょうか?これでちょっと本格的になってきたと思います。実を言うと他にも外部キー制約というものがあります。他のテーブルのキーを参照しているカラムに設定する制約です。次回はそちらに取り組んでみようと思います。お楽しみに!!

hirocom777.hatenadiary.org

ExcelVBAでAccessファイルを操作する連載はコチラから