データ入力ツール③(ExcelでRDBその22)

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

hirocom777.hatenadiary.org

データ入力機能を考える

前回はデータ入力ツールのひな形を作ってみました。大分イメージが固まってきましたね。

今回は、いよいよデータ入力機能の実装を行っていきたいと思います。

インターフェイスの対応

まずデータ入力のインターフェイスを考えてみましょう。以下に前回までの画面を再掲します。

この画面は基本的に入力にプロテクトがかかっています。ここからテーブルを指定してフィールドの情報が決定されると、入力データ欄にデータを入力できるように変更しましょう。視覚的にも入力できるようになったことを明示すると親切でしょう。入力が完了したら入力決定ボタンを押すことで、入力されたデータを指定のテーブルに追加登録します。

大体方針が固まってきました。

機能の実装

それでは機能を実装していきましょう。まずはデータ入力の準備です。カラムリスト表示するプロシージャに入力データの準備する部分を追加しました。具体的にはプロテクトの解除と背景色の変更です。決以下の様になりました。

'カラムリストを表示します
Private Sub DispColumnList(fileName As String, tableName As String)
Dim db As clsAccessDbase
Dim i As Long
On Error GoTo ErrorHandler
  '表示をクリアします
  Me.Range("DATA_AREA").ClearContents
  Me.Range("A10").Activate
  Me.Range("TableName").Select
  'カラム情報を表示します
  Set db = New clsAccessDbase
  db.dbFileName = Me.Range("FileName").Text
  db.dbTableName = Me.Range("TableName").Text
  With Me.Range("columnList").Offset(1, 0)
    For i = 0 To UBound(db.dbFieldList)
      .Offset(i, -1) = i + 1
      .Offset(i, 0) = db.dbFieldList(i)
      .Offset(i, 1) = GetDataInfo(CLng(db.dbFieldType(i)))
      .Offset(i, 2) = GetKeyInfo(CLng(db.dbKeyType(i)))
      .Offset(i, 3).Locked = False
      .Offset(i, 3).Interior.Color = vbCyan '背景色水色(入力許可)
    Next i
  End With
  'レコード数表示します
  Me.Range("RecordCount").Value = db.dbRecordCount
ErrorHandler:
  If Err.Number <> 0 Then MsgBox "テーブルエラーです"
End Sub

お次は実際に入力されたデータの登録です。入力決定のボタンに以下のプロシージャを貼り付けます。実際の登録は、クラスモジュールのAddRecordメソッドを使います。

'データ登録を実行します
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)
    inputData(i) = Me.Range("columnList").Offset(1 + i, 3)
  Next
  'データを登録します
  db.AddRecord inputData
  Me.Range("RecordCount").Value = db.dbRecordCount
  MsgBox "データを登録しました"
End Sub

動かしてみる

それでは実際に動かしてみます。ツールを開いてからファイル指定ボタンでデータ入力するサンプルファイルTest.accdbを指定します。サンプルファイルはテーブルが1つあります。氏名(テキスト型)、生年月日(日付型)、備考(メモ型)のフィールドを持っていますがデータは登録されていません。以下の様に入力して、入力決定ボタンを押してみてください。 サンプルファイルを確認してみましょう。Excelにファイルをドラッグアンドドロップして確認できます。以下の様に入力されていました。

氏名 生年月日 備考
Tom 2002/4/30 Age 18

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

22_データ入力ツール③.zip - Google ドライブ

次回は入力規制

いかがでしょうか。これでデータ入力ができるようになりました。でも、何でも入力できればいいとは限りません。データ型によって、入力できるデータは限られます。たとえば、整数型のフィールドに文字列データは登録できません。次回はこの部分を工夫してみようと思います。お楽しみに!!

hirocom777.hatenadiary.org

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