【Access】不真面目にシステム開発を考える5~リンクテーブルを設定しデータを更新する~
システム概要
梅雨ですね。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も同様です。
乙ぴょん。
つか、ブログ公開し忘れていた。。。
したら、またね✋
ディスカッション
コメント一覧
まだ、コメントがありません