関連記事

  1. DataGridViewへAccessのデータベースファイルを読み込む
  2. AccessDBテーブルの主キー情報を取得する
  3. DataGridViewに読み込んだDB情報を再取得する
  4. DataGridViewをセル編集したときの行数を格納する
  5. Accessのデータベースファイルへ書き込むための接続・切断
  6. Accessデータベースのレコードを削除する
  7. Accessデータベースを更新する ←NOW!

ガッツリ続き物になってしまいました…。過去の分と合わせて順番に読んでいただけると分かりやすいかと思います。

なるべく簡素に書いているので、例外処理は甘いと思われます。ご参考にする際は、ご自分の環境に合わせてご修正ください。

解説のためツギハギしちゃったので、最後の記事(7回め)に全コードまとめてあります。

環境

  • Visual Studio 2010
  • .NET Framework 4.0

です。

SQL文を生成する

150316-1

今までの実装で、追加や変更したセルに色がついて該当行(ゼロから始まる)が格納されているはずです。ここで「保存」ボタンを押して走るコードを実装します。

Form2.vb

Button2のクリックイベントに書きます。

getUpdateSqlという関数を使ってUPDATE文のリストを生成(32行目)、getInsertSqlという関数を使ってINSERT文のリストを生成(35行目)、その2つを合わせちゃいます(37行目)。

で、そのリストを持って汎用のrunSQLへ(40行目)。

DBtable.vb

上で書いたgetInsertSqlgetUpdateSql関数を書きます。

19~52行目が、INSERT文をリスト型で返すgetInsertSqlという関数。insertList を参照しながら、追加のあった行のフィールド名を値をそれぞれ並べて、INSERT文を生成します。値は、囲み文字を含めた形を取得するgetFieldTxtという関数を呼んでいます(40行目)。

54~80行目が、UPDATE文をリスト型で返すgetUpdateSqlという関数。updateList を参照しながら、変更のあった行を「フィールド名=値」という形にして、UPDATE文を生成します。ここでも、囲み文字を含めた値を取得するgetFieldTxt関数を呼んでいます(67行目)。WHERE句は、DELETE のときにも使ったgetWhereTxt関数も使ってます(73行目)。

両方から呼ばれてるgetFieldTxt関数は90~107行目。値がなければ Null、あれば囲み文字が違うのでgetEncloseTxt関数(前回作ったやつ)を呼び出したり、まぁいろいろやってます。

使ってみたら、DataGridView の新行かつ型が Boolean で何もセルを触らなかった場合、「false」でなく「NULL」と判定されてしまう現象が確認できたので、100~101行目で処理しています。他にも何かあったらここで設定したほうが良いかもしれません。

動作確認

動かしてみます。

150316-1

中身を変えて「保存」ボタンを押すと、

150316-2

出来た! …けど、あれ? INSERT した行が一番上になってる…。

調べてみると、こちらのページの最後の方にこうありました。

並び順を指定しなかった場合取得したレコードは予測不可能な順番で並んでいるということを覚えておいてください。
なお、並び順を指定する場合はSQL文でORDER BYを使用します。

(中略)

SQL Serverの場合は並び順を指定しなかった場合はクラスタードインデックス(つまり主キー)の順に自動的に整列します。つまり、このあたりの仕様はデータベースによって異なります。そういったことをこまごまと気にするのは大変なので順番が重要な場合はORDER BYを指定する癖をつけておきましょう。

なるほど。ちなみにこの VB で新しく追加したレコードを Access を起動して見てみたら、そちらでは一番下に追加されていましたので、DataGridView の仕様かもしれません。気になる方は ORDER BY で並び順もきちんと指定してあげるのが良さそうです。

こんな感じですが、一応、当初やりたかった機能は全て実装することが出来たので、これでこのシリーズは終了になります。需要は少ない気がしますが、どなたかのお役に立てたら光栄です。

全コード

7回に分けてツギハギしてきたので、ここで全部載せておきます。フォームのデザインは最初の記事にあります。

Form1.vb

Form2.vb

DBtable.vb

TargetList.vb

拙いコードですが煮るなり焼くなり。お気づきの点があったら教えて下さい!

書籍を執筆しています。

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 635
  • RSSを登録

公開日:2015/03/16
更新日:2017/04/25


コメントを残す




*印は必須項目です。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)


back to top