2015
3
05

VB.NETからAccessデータベースのレコードを削除する

DataGridView に読み込んだ、Accessのデータベースをいじっていきます! 今回はレコードの削除についてです。


関連記事

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

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

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

環境

  • Visual Studio 2010
  • .NET Framework 4.0

です。

コード

150305-1

まず、このボタンを押された時のクリックイベントを。図のようにどこかが選択されているとして、その行を削除するというイメージです。

Module1.vb

最初に Module1 の宣言セクションにフラグを Public 宣言しておきます。

Form2.vb

3~6行目で、削除すべき行が選択されていない場合はメッセージを出して Exit します。

次は8行目で、UPDATE や INSERT で編集中のものがないかチェックしています。DELETE した後再読込するので、ここにデータがあった場合消えてしまうので。

そこも通ったら、9行目でメッセージを出します。

150305-2

これです。削除なので、ワンクッション入れたほうが安心。「OK」の返り値が 1 なので、それ以外が返ってきたら Exit します。

11行目でようやく削除用プロシージャ(この後書きます)へ飛びます。Form2 の Text(テーブル名)と、選択されている行数(削除する行)を引数で持っていきます。その後、削除が成功していたら(フラグが立っていたら)再読込してメッセージを出して終了。

Module1.vb

1行目でテーブル名と該当行を受け取って、それを使って DELETE 文を書きます。14行目で成功フラグを立てておきます。あとは前回書いたテンプレ通りなので説明は割愛。

ここで、主キー情報を使って WHERE 句も作るわけですが、あとで UPDATE 文を書くときにも使えるので、関数化して別に書いておくと便利だと思います。

ですので、先に7行目で WHERE 句生成の関数に飛ばしておいて、それを受け取って10行目でくっつけて、実行する、という流れに。

Module1.vb

WHERE句を生成する関数

こちらがその WHERE 句生成関数の中身です。

最初は「WHERE ~」から始まりますが、2回目以降は「AND ~」にしなきゃいけないので、変数 n を使って数を数えています。

ListBox1 に主キーの列番号、ListBox2 にフィールドの型名が入っているので、主キーの数だけ型名を参照しつつ(Stringなら ‘ をつけて)、WHERE 句を作っていきます。

追記:WHERE句を生成する関数(改)

こちらの記事で UPDATE, INSERT 文を作るときに新しくMAKE_field_txtという関数をつくりました。各フィールドの中身を、型によって括る文字を変えたり、NULL 判定などしてくれます。

WHRER 句は基本的に主キーなので NULL ということはありませんが、上記のコードではテキスト型を「’」で括る処理しかしていなくていろいろ例外処理も甘いので、せっかくなのでここもその関数を通したほうが良いと思います。

というわけで、追記としてこのような形に。

動作確認

ここまでコードを書いてから動かしてみます。

150305-1

ひとつ選んで削除ボタンを押し、

150305-2

確認メッセージをOKしてみると、

150305-3

レコードが削除され、DataGridView が再読込されて表示も消えました。

以上です! 次回、UPDATE と INSERT を実装してひととおり終わりにするつもりですー!

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

公開日:2015/03/05
更新日:2015/03/16


コメントを残す




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


back to top