【Access】不真面目にシステム開発を考える5~リンクテーブルを設定しデータを更新する~

2024年7月25日

システム概要

梅雨ですね。Jimです。どうも✋

 

 

梅雨でジメジメするのが嫌いって人が多いけど、自分はそこまで嫌いじゃないんだよね。

はい。ってことで、今回はリンクテーブルを設定してSQLServerのデータを更新します。

プログラムが多くなった時に管理がしやすいように、プログラムの場所やシステムの設計書が確認できるようなものを作成します。

まず、設定前にシステム研究部のメニューを一つ追加。

 

 

クリックするとシステム情報のメニューが表示され、新規登録ボタンをクリックするとシステム情報が入力できるフォームを用意しました。

 

結構、話ぶっ飛んでるけど、今回はSQLServerのODBCリンクテーブルを作成してリンクを使ってデータベースを更新するのがメインなので気になさらず。

登録ボタンを押すとコントロール部分(下図の赤枠部分)がデータベースにINSERTされる仕様でいきます。

 

 

リンクテーブルを設定する

リンクテーブルを作るにはデータソースファイルを用意します。

このファイルはデータベースごとに作成し、次回からは同じデータベースのリンクを作りたい時にこのファイルを使用します。

 

↓外部データ⇒新しいデータソース⇒他のソースから⇒ODBCデータベース(Officeのバージョンによっては外部データ直下にあった気がします)

 

↓リンクテーブルを作成してソースデータにリンクするを選択しOK

 

↓新規作成選択

 

↓SQLServerを選択し次へ

 

↓参照を選択

 

↓データソースファイルをお好きな場所に保存します

 

↓次へ

 

↓完了

 

↓サーバー名を入力し次へ

 

↓Windows認証を選択し次へ(SQLServer認証はSQLServerでパスワード付きのユーザーを作成する必要があります)

 

↓既定のデータベースを以下のものにするを選択しリンクしたいデータベース名を選択し次へ

 

↓完了

 

↓OK(これでデータソースファイル作成完了)

 

↓データソースを選択(次回からは作成したデータソースを選択すればよい)

 

↓リンクしたいテーブルを選択しOK

 

↓リンクテーブルが作成できました

 

 

コンボボックスのデータソースにリンクを使用

SQLServerには部署名のテーブルを用意しておきました。

 

このテーブルの部署名をコンボボックスのソースに設定します。

また、部が重複しているのでグループ化して一つずつ表示させます。

↓レイアウトビューかデザインビューでコンボボックスを選択しプロパティシートの集合ソースの『…』を選択

 

↓テーブルの追加⇒部をダブルクリック(ドラッグアンドドロップ)⇒Σ集計⇒並べ替えを昇順

 

↓フォームビューで表示しコンボボックスを選択

 

フォームの内容をリンク(SQLServer)にInsertする

長くなりましたが、最後にSQLServerのデータを更新します。

下図のようにSQLServerにシステム情報を用意してあります。

 

このテーブルにフォームの内容をInsertします。

フォームのコントロールには、データベースと紐づくように名前を付けてあります。(c_cmb_〇〇)

やりかたはいくつかありますので、3つほど紹介します。ソースコードは最後に載せておきます。

1、insert1

フォームのコントロールの内容をそのままInsertに使います

2、insert2

ワークテーブルを用意しておいてフォームのソースにします

そうすると、フォームの内容とワークテーブルがリンクします(フォーム=ワークテーブル)

ワークテーブルをリンクテーブルにInsertします

3、insert3

リンクテーブルのレコードセットを使ってInsertします

 

Private Sub insert1()
    
    'INSERT部分とVALUES部分を分けて記述
    Dim insertStr As String
    Dim selectStr As String

    insertStr = "INSERT INTO dbo_T_システム情報("
    selectStr = " VALUES("

    insertStr = insertStr & "グループCD"
    selectStr = selectStr & "'" & Me.c_cmb_チーム名.Value & "'"

    insertStr = insertStr & ",カテゴリ"
    selectStr = selectStr & ",'" & Me.c_cmb_カテゴリ.Value & "'"

    insertStr = insertStr & ",ファイル名"
    selectStr = selectStr & ",'" & Me.c_cmb_ファイル名.Value & "'"

    insertStr = insertStr & ",システム設計書"
    selectStr = selectStr & ",'" & Me.c_cmb_システム設計書.Value & "'"

    insertStr = insertStr & ",ユーザーマニュアル"
    selectStr = selectStr & ",'" & Me.c_cmb_ユーザーマニュアル.Value & "'"

    insertStr = insertStr & ",設定マニュアル)"
    selectStr = selectStr & ",'" & Me.c_cmb_設定マニュアル.Value & "');"

    DoCmd.RunSQL insertStr & selectStr

End Sub

Private Sub insert2()

    'フォームを更新してワークテーブルを最新の状態にする
    Me.Requery
    
    'ワークテーブルをリンクテーブルにINSERT
    DoCmd.RunSQL "INSERT INTO dbo_T_システム情報 SELECT * FROM W_システム情報;"

End Sub

Private Sub insert3()

    'レコードセット
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM dbo_T_システム情報;")

    'アドニューでINSERT
    rs.AddNew

    rs.Fields("グループCD").Value = Me.c_cmb_チーム名.Value
    rs.Fields("カテゴリ").Value = Me.c_cmb_カテゴリ.Value
    rs.Fields("ファイル名").Value = Me.c_cmb_ファイル名.Value
    rs.Fields("システム設計書").Value = Me.c_cmb_システム設計書.Value
    rs.Fields("ユーザーマニュアル").Value = Me.c_cmb_ユーザーマニュアル.Value
    rs.Fields("設定マニュアル").Value = Me.c_cmb_設定マニュアル.Value

    rs.Update

    rs.Close
    Set rs = Nothing

End Sub

Private Sub c_btn_登録_Click()

    Call insert1
    Call insert2
    Call insert3

End Sub

 

思ったより長くなってしまった。。。

まあ、これでSQLServerを更新できることができました。

InsertができればSelectもUpdateもDeleteも同様です。

 

 

乙ぴょん。

つか、ブログ公開し忘れていた。。。

したら、またね✋