ACCESSのMDBでデータを編集する

.NET (VB)の内容
【注意書き】
●VB.NET を使っているものとします。
●動作環境は、Windows XX を使用しているとします。
●Microsoft.Jet.OLEDB.4.0 を使用しています。
●Microsoft Access 9.0 Object Library を使用しています。


VB.NET でも、
ACCESSのMDBを作成して編集することが可能です。

この機能を使えば、簡単に、
ACCESSの機能を使ったデータベースを取り扱うアプリケーション
など簡単に作成できます。

今回は、カード型の編集サンプルです。

フォームに次の様なコードを記述します


-----------VB.NETコーディングここから-------------------

1.メニューバーの中に、「プロジェクト」→「参照の追加」
   から、「COM」のタブ中にある

    Microsoft ADO Ext X.X for DDL and Securityと
    Microsoft Access X.X Object Library

    の2つを選んで、
   「選択」を押し、その後、「OK」を押します。

  この操作で、参照が追加されます。

    ※バージョンは、X.Xの部分が数字です。
    Microsoft ADO Ext 2.7 for DDL and Security など
    Microsoft Access 9.0 Object Library など

2.フォームに、
    ラベルコントロール、
    テキストボックスコントロール、
    ボタンコントロール
    を配置します。
    下記は、デフォルトのオブジェクトの名前と配置を示しています。

   ┏━━━━━━━━━━━┓   ┏━━━━━━━━━━━┓
   ┃Label1                ┃   ┃TextBox1              ┃
   ┗━━━━━━━━━━━┛   ┗━━━━━━━━━━━┛
   ┏━━━━━━━━━━━┓   ┏━━━━━━━━━━━┓
   ┃Label2                ┃   ┃TextBox2              ┃
   ┗━━━━━━━━━━━┛   ┗━━━━━━━━━━━┛
   ┏━━━━━━━┓
   ┃Button1       ┃
   ┗━━━━━━━┛

   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃Label3                ┃┃TextBox3              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛
   ┏━━━━━━━┓
   ┃Button2       ┃
   ┗━━━━━━━┛

   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃Label4                ┃┃TextBox4              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛
   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃Label5                ┃┃TextBox5              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛
   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃Label6                ┃┃TextBox6              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛


   ┏━━━━━━━┓   ┏━━━━━━━┓
   ┃Button3       ┃   ┃Button4       ┃
   ┗━━━━━━━┛   ┗━━━━━━━┛


3.ボタンコントロールの
    Button1 text プロパティに「MDB作成」と記述します。
    Button2 text プロパティに「データ検索」と記述します。
    Button3 text プロパティに「データ追加更新」と記述します。
    Button4 text プロパティに「データ削除」と記述します。

    Label1 text プロパティに「作成先ディレクトリ」と記述します。
    Label2 text プロパティに「作成先ファイル名」と記述します。
    Label3 text プロパティに「ID」と記述します。
    Label4 text プロパティに「名前」と記述します。
    Label5 text プロパティに「性別」と記述します。
    Label6 text プロパティに「電話番号」と記述します。
  ※説明用のためです。必須ではありません。


   ┏━━━━━━━━━━━┓   ┏━━━━━━━━━━━┓
   ┃作成先ディレクトリ    ┃   ┃TextBox1              ┃
   ┗━━━━━━━━━━━┛   ┗━━━━━━━━━━━┛
   ┏━━━━━━━━━━━┓   ┏━━━━━━━━━━━┓
   ┃作成先ファイル名      ┃   ┃TextBox2              ┃
   ┗━━━━━━━━━━━┛   ┗━━━━━━━━━━━┛
   ┏━━━━━━━┓
   ┃MDB作成       ┃
   ┗━━━━━━━┛

   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃ID                    ┃┃TextBox3              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛
   ┏━━━━━━━┓
   ┃データ検索    ┃
   ┗━━━━━━━┛

   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃名前                  ┃┃TextBox4              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛
   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃性別                  ┃┃TextBox5              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛
   ┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓
   ┃電話番号              ┃┃TextBox6              ┃
   ┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛


   ┏━━━━━━━┓   ┏━━━━━━━┓
   ┃データ追加更新┃   ┃データ削除    ┃
   ┗━━━━━━━┛   ┗━━━━━━━┛


4.ボタンコントロールをダブルクリックして、
    ボタンのクリックイベントの編集を開始して、
    フォームの宣言部に、次のコードを記述します。


    Dim MjstrPath As String


    Dim MjstrID As String           'ID
    Dim MjstrSimei As String        '名前
    Dim MjstrSexnam As String       '性別
    Dim MjstrTel As String          '電話番号





  さらに次のコードを記述します。


    '作成先パス(ディレクトリとファイル名)を指定
    Function MDB_CRTDATABASE(ByVal PistrMakPath As String) As Boolean


        MDB_CRTDATABASE = False

        Dim objCat As ADOX.Catalog    'カタログ
        Dim strDatbasePara As String    'データベースパラメータ


        Dim strTable As String          'テーブル名称
        Dim objTable As ADOX.Table      'テーブル



        strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
                        "Data Source=" + PistrMakPath + ";" + _
                        "Jet OLEDB:Engine Type=5;"
        Try

            'ADOXオブジェクトを作成します
            objCat = New ADOX.Catalog

            'MDB作成
            objCat.Create(strDatbasePara)



            '初期テーブルを作成します
            ' テーブル名を指定してテーブルを追加する
            strTable = "sampleTable"
            objTable = New ADOX.Table

            With objTable


                .Name = strTable
                .Columns.Append("ID", _
                ADOX.DataTypeEnum.adInteger)
                .Columns.Append("名前", _
                ADOX.DataTypeEnum.adVarWChar, 50)
                .Columns.Append("性別", _
                ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("電話番号", _
                ADOX.DataTypeEnum.adVarWChar, 20)
                'NULLを許さない
                .Columns("ID").Attributes = _
                ADOX.ColumnAttributesEnum.adColNullable

            End With

            objCat.Tables.Append(objTable)



            MDB_CRTDATABASE = True

        Catch ex As Exception

        End Try

        objCat = Nothing

    End Function



    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

        Dim strMdbpath As String

        strMdbpath = TextBox1.Text + "\" + TextBox2.Text


        If TextBox1.Text = "" Then
            MsgBox("MDB作成ディレクトリを入力してください")
            Exit Sub
        End If
        If TextBox2.Text = "" Then
            MsgBox("MDB作成ファイル名を入力してください")
            Exit Sub
        End If
        If Dir(strMdbpath) <> "" Or _
        Dir(strMdbpath + ".mdb") <> "" Then
            MsgBox("すでに存在しています")
            Exit Sub
        End If

        If MDB_CRTDATABASE(strMdbpath) Then
            MsgBox("作成しました")
        Else
            MsgBox("作成に失敗!")
        End If

    End Sub




    'データを追加更新する
    '失敗で0を返す 追加で1,更新で2 を返す
    Function MDB_INSERTUPDATE(ByVal PistrMakPath As String) As Integer


        MDB_INSERTUPDATE = 0

        Dim strDatbasePara As String    'データベースパラメータ

        Dim ObjCnn As New ADODB.Connection
        Dim ObjRst As New ADODB.Recordset
        Dim strSelectSql As String


        strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
                        "Data Source=" + PistrMakPath + ";" + _
                        "Jet OLEDB:Engine Type=5;"
        Try

            ObjCnn.Open(strDatbasePara)


            strSelectSql = "Select * from sampleTable" _
            + " where ID = " + MjstrID

            ObjRst.Open(strSelectSql, ObjCnn, _
            ADODB.CursorTypeEnum.adOpenKeyset, _
            ADODB.LockTypeEnum.adLockOptimistic)

            If ObjRst.EOF Then
                '該当しなければ追加します
                ObjRst.AddNew()
                ObjRst.Fields("ID").Value = MjstrID
                ObjRst.Fields("名前").Value = MjstrSimei
                ObjRst.Fields("性別").Value = MjstrSexnam
                ObjRst.Fields("電話番号").Value = MjstrTel
                MDB_INSERTUPDATE = 1
            Else
                '該当すれば更新します
                ObjRst.Fields("ID").Value = MjstrID
                ObjRst.Fields("名前").Value = MjstrSimei
                ObjRst.Fields("性別").Value = MjstrSexnam
                ObjRst.Fields("電話番号").Value = MjstrTel
                MDB_INSERTUPDATE = 2
            End If




            ObjRst.Update()
            ObjRst.Close()



        Catch ex As Exception

        End Try

        ObjCnn = Nothing
        ObjRst = Nothing

    End Function



    'データを検索する
    Function MDB_SELECT(ByVal PistrMakPath As String) As Boolean


        MDB_SELECT = False

        Dim strDatbasePara As String    'データベースパラメータ

        Dim ObjCnn As New ADODB.Connection
        Dim ObjRst As New ADODB.Recordset
        Dim strSelectSql As String


        strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
                        "Data Source=" + PistrMakPath + ";" + _
                        "Jet OLEDB:Engine Type=5;"
        Try

            ObjCnn.Open(strDatbasePara)


            strSelectSql = "Select * from sampleTable" _
            + " where ID = " + MjstrID

            ObjRst.Open(strSelectSql, ObjCnn, _
            ADODB.CursorTypeEnum.adOpenKeyset, _
            ADODB.LockTypeEnum.adLockOptimistic)

            If ObjRst.EOF Then
                MjstrSimei = ""
                MjstrSexnam = ""
                MjstrTel = ""
            Else
                MjstrID = ObjRst.Fields("ID").Value
                MjstrSimei = ObjRst.Fields("名前").Value
                MjstrSexnam = ObjRst.Fields("性別").Value
                MjstrTel = ObjRst.Fields("電話番号").Value
                MDB_SELECT = True
            End If


            ObjRst.Update()
            ObjRst.Close()



        Catch ex As Exception

        End Try

        ObjCnn = Nothing
        ObjRst = Nothing

    End Function


    'データを削除する
    '失敗で0を返す 削除で1,該当なしで2 を返す
    Function MDB_DELETE(ByVal PistrMakPath As String) As Integer


        MDB_DELETE = 0

        Dim strDatbasePara As String    'データベースパラメータ

        Dim ObjCnn As New ADODB.Connection
        Dim ObjRst As New ADODB.Recordset
        Dim strSelectSql As String


        strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
                        "Data Source=" + PistrMakPath + ";" + _
                        "Jet OLEDB:Engine Type=5;"
        Try

            ObjCnn.Open(strDatbasePara)


            strSelectSql = "Select * from sampleTable" _
            + " where ID = " + MjstrID

            ObjRst.Open(strSelectSql, ObjCnn, _
            ADODB.CursorTypeEnum.adOpenKeyset, _
            ADODB.LockTypeEnum.adLockOptimistic)

            If ObjRst.EOF Then
                '該当しなければ何もしません
                MDB_DELETE = 2
            Else
                '該当すれば削除します
                MjstrSimei = ""
                MjstrSexnam = ""
                MjstrTel = ""
                ObjRst.Delete()
                MDB_DELETE = 1
            End If


            ObjRst.Update()
            ObjRst.Close()

        Catch ex As Exception

        End Try

        ObjCnn = Nothing
        ObjRst = Nothing


    End Function








    Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load

        'ディレクトリを取り出しています
        Dim strWorkPath As String
        Dim strPath As String

        'アプリケーションディレクトリを取得する
        strWorkPath = _
        System.Reflection.Assembly.GetExecutingAssembly.Location
        Dim myFileInfo As New System.IO.FileInfo(strWorkPath)
        MjstrPath = myFileInfo.DirectoryName

        TextBox1.Text = MjstrPath
        TextBox2.Text = "sample.mdb"

    End Sub






    'データを検索する
    '検索
    Private Sub Button2_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click

        Dim strMdbpath As String
        Dim intRecQuery As Integer

        strMdbpath = TextBox1.Text + "\" + TextBox2.Text

        MjstrID = TextBox3.Text

        If MDB_SELECT(strMdbpath) Then
            MsgBox("検索該当しました")
        Else
            MsgBox("該当ありません")
        End If

        TextBox4.Text = MjstrSimei
        TextBox5.Text = MjstrSexnam
        TextBox6.Text = MjstrTel


    End Sub





    '追加更新ボタン
    Private Sub Button3_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button3.Click

        Dim strMdbpath As String
        Dim intRecQuery As Integer

        strMdbpath = TextBox1.Text + "\" + TextBox2.Text

        MjstrID = TextBox3.Text
        MjstrSimei = TextBox4.Text
        MjstrSexnam = TextBox5.Text
        MjstrTel = TextBox6.Text

        intRecQuery = MDB_INSERTUPDATE(strMdbpath)

        Select Case intRecQuery
            Case 1
                MsgBox("追加しました")
            Case 2
                MsgBox("更新しました")
            Case Else
                MsgBox("追加更新失敗!")

        End Select

    End Sub

    '削除ボタン
    Private Sub Button4_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button4.Click

        Dim strMdbpath As String
        Dim intRecQuery As Integer

        strMdbpath = TextBox1.Text + "\" + TextBox2.Text

        MjstrID = TextBox3.Text

        intRecQuery = MDB_DELETE(strMdbpath)

        Select Case intRecQuery
            Case 1
                MsgBox("削除しました")
            Case 2
                MsgBox("該当ありません")
            Case Else
                MsgBox("削除失敗!")

        End Select

        TextBox4.Text = MjstrSimei
        TextBox5.Text = MjstrSexnam
        TextBox6.Text = MjstrTel

    End Sub



5.ビルドして実行します。

6.フォームに表示された
    コマンドボタン「MDB作成」を押します。

7.作成先ディレクトリと作成先ファイルに指定された
    mdb 形式のファイルが作成されます。


     ※ACCESS MDB内のデータイメージ(sampleTable)
     ID  名前         性別  電話番号
     -----------------------------------
     EOF




8.  ID       に 10              を入力します
9.  名前     に どっとタロウ    を入力します
10.性別     に 男性            を入力します
11.電話番号 に 090-111-2222    を入力します


12.データ追加更新ボタンを押します
13.新規のデータであるので
      「データを追加しました」と表示されます

     ※ACCESS MDB内のデータイメージ(sampleTable)
     ID  名前         性別  電話番号
     -----------------------------------
     10  どっとタロウ 男性  090-111-2222
     EOF




14.  ID       に 20              を入力します
15.  名前     に どっとハナコ    を入力します
16.  性別     に 女性            を入力します
17.  電話番号 に 090-333-7777    を入力します

18.データ追加更新ボタンを押します
19.新規のデータであるので
      「データを追加しました」と表示されます

     ※ACCESS MDB内のデータイメージ(sampleTable)
     ID  名前         性別  電話番号
     -----------------------------------
     10  どっとタロウ 男性  090-111-2222
     20  どっとハナコ 女性  090-333-7777
     EOF




20.  ID       に 10              を入力します
21.データ検索ボタンを押します

22.ID 10 のデータが存在するので
      「検索該当しました」と表示されます


     ※ACCESS MDB内のデータイメージ(sampleTable)
     ID  名前         性別  電話番号
     -----------------------------------
     10  どっとタロウ 男性  090-111-2222
     20  どっとハナコ 女性  090-333-7777
     EOF


23.該当した ID 10 のレコード データが表示されます

     ID       に 10              が表示されます
     名前     に どっとタロウ    が表示されます
     性別     に 男性            が表示されます
     電話番号 に 090-111-2222    が表示されます






24.表示中のID 10 のレコードを削除しようと思うので
      データ削除ボタンを押します

25.「データ削除しました」と表示されます
    ※ID 10 のレコードデータが削除されます

     ※ACCESS MDB内のデータイメージ(sampleTable)
     ID  名前         性別  電話番号
     -----------------------------------
     20  どっとハナコ 女性  090-333-7777
     EOF



26.  ID       に 20              を入力します
27.データ検索ボタンを押します
28.ID 20 のデータが存在するので
      「検索該当しました」と表示されます
29.該当した ID 20 のレコード データが表示されます


     ※ACCESS MDB内のデータイメージ(sampleTable)
     ID  名前         性別  電話番号
     -----------------------------------
     20  どっとハナコ 女性  090-333-7777
     EOF





30.  名前     に どっとねっと    を入力します

31.データ追加更新ボタンを押します
32.「データを更新しました」と表示されます


     ※ACCESS MDB内のデータイメージ(sampleTable)
     ID  名前         性別  電話番号
     -----------------------------------
     20  どっとねっと 女性  090-333-7777
     EOF


33.可能なら MS Office ACCESS 2000 アプリケーションで
      作成した MDB sample.mdb を ACCESS で確認してみます。

-----------VB.NETコーディングここまで-------------------

本サンプルでは、
System.Reflection.Assembly.GetExecutingAssembly.Location
で実行パスを取得して、sample.mdb をデフォルトで指定しています。

この部分を変更することで、
希望する作成先のディレクトリパスへ簡単にmdb作成が可能です。

また、このサンプルでは、mdb作成と同時に
空のテーブル sampleTable をデフォルトで作成しています。

フィールド名       型     幅    値要求
ID             数値型     --    はい
名前       テキスト型     50    いいえ
性別       テキスト型     50    いいえ
電話番号   テキスト型     10    いいえ


注意としましては、
ADO では、新しいレコードに移動すると
現在のレコードへの変更は自動的にコミットされます。
DAO と ADO では、
共に現在レコードへの変更を明示的に破棄するには
 CancelUpdate 、メソッドを使用します。

本サンプルでは ID をキーにしたカード型のレコード編集を
再現しています





 

http://anetm.com/dev/d.cgi?SC=DTDTL&o=Om3

Copyright(c)2001-2006 Ai Net Makoto 記事・情報の無断転載を禁止します。