VB.NETでDataGridViewにMDBファイルをバインドし、編集後にその内容をMDBファイル(元データ)に反映するプログラムを作成しています。
上記の内容が通るコードを書けるようになったのですが、今度はNULLの置換処理が必要なようで、困っています。
NULLに対して以下のような変換をしたい。
数値型→NULL
文字型→String.Empty(0文字列)
チェックボックス→FALSE
また、置換の書き方もよくわかっていないので教えていただけると嬉しいです。
使用言語はVB.NETです。
列の型を調べて、置換の際に型指定が必要なようなのですが、そちらもやり方が出来ていません。
なんとなくでも言いたいことがわかる、という方がいらっしゃいましたら教えてください。
よろしく願いします。
###追記
Imports Microsoft.VisualBasic.ControlChars Imports System.Data.OleDb Public Class Form1 Private Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\コピー.mdb") Private SQLCm As OleDbCommand = Cn.CreateCommand Private Adapter As New OleDbDataAdapter(SQLCm) Private Table As New DataTable 'Loadイベント Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '自分で定義した列しかバインドしない DataGridView1.AutoGenerateColumns = False SQLCm.CommandText = "SELECT a, b, c, d, e, f, g, h, IDNo FROM tblL WHERE DELFLG <> TRUE" Dim cb As New System.Data.OleDb.OleDbCommandBuilder() Adapter.Fill(Table) '▼値の表示 DataGridView1.DataSource = Table End Sub '削除 Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click MessageBox.Show("選択したデータを削除してもよろしいですか", "加工ラベル印刷", MessageBoxButtons.YesNo, MessageBoxIcon.Question) Dim i As Integer If Windows.Forms.DialogResult.Yes Then For i = DataGridView1.Rows.Count - 1 To 0 Step -1 If DataGridView1("a", i).Value = True Then DataGridView1.Rows.RemoveAt(i) End If Next End If End Sub '全選択 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim i As Integer For i = 0 To DataGridView1.Rows.Count - 1 DataGridView1("a", i).Value = True Next End Sub '全解除 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim i As Integer For i = 0 To DataGridView1.Rows.Count - 1 DataGridView1("a", i).Value = False Next End Sub '閉じる Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Close() End Sub Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Table As DataTable = DirectCast(DataGridView1.DataSource, DataTable) For Each Row As DataRow In Table.Rows Dim SQL As String = "" '●SQL文の生成 Select Case Row.RowState Case DataRowState.Added '▼追加されたレコード SQL = "INSERT INTO tblL ( " SQL &= "a" & ", " SQL &= "b" & ", " SQL &= "c" & ", " SQL &= "d" & ", " SQL &= "e" & ", " SQL &= "f" & ", " SQL &= "g" & ", " SQL &= "h" & ") " SQL &= "VALUES" & " (" SQL &= Row("a") & "," SQL &= "'" & Row("b") & "', " SQL &= "'" & Row("c") & "', " SQL &= "'" & Row("d") & "', " SQL &= "'" & Row("e") & "', " SQL &= "'" & Row("f") & "', " SQL &= "'" & Row("g") & "', " SQL &= Row("h") SQL &= ")" '▼削除されたレコード Case DataRowState.Deleted SQL = "DELETE FROM tblL WHERE " SQL &= " IDNo = " & Row("IDNo", DataRowVersion.Original) '▼更新されたレコード Case DataRowState.Modified SQL = "UPDATE tblL SET" SQL &= " a = " & Row("a") & ", " SQL &= "b = '" & Row("b") & "', " SQL &= "c = '" & Row("c") & "', " SQL &= "d = '" & Row("d") & "', " SQL &= "e = '" & Row("e") & "', " SQL &= "f = '" & Row("f") & "', " SQL &= "g = '" & Row("g") & "', " SQL &= "h = " & Row("h") SQL &= " WHERE " SQL &= "IDNo = " & Row("IDNo", DataRowVersion.Original) Case Else Continue For End Select '●更新実行 SQLCm.CommandText = SQL Cn.Open() SQLCm.ExecuteNonQuery() Cn.Close() Next '▼後処理 Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose()
上記が作成コードです。
Form1のLoadイベントでMDBファイルの取込、展開をしています。
Buttonイベントなどももっと上に書いてあるのですが、最終的にClosedイベントが発生したらデータ反映がされるように想定しています。
その際に、今後何か変更があってもすぐに対応ができるようにVB.NET上でNULLの置換処理をしたいと考えています。
見え方としては
数値がNULLの場合→ブランク
文字列がNULLの場合→ブランク
チェックボックスがNULLの場合→FALSE
というようにしたいと考えています。
これが自分のやりたいことを詳しく説明できているかはちょっとわからないのですが、動作としては上記のようにしたいです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/02 13:16
2016/08/02 13:41
2016/08/03 01:49
2016/08/03 03:13 編集
2016/08/05 19:52
2016/08/08 01:16 編集