タイトル : Re: VB2010よりアクセスのデータ型YES/NO型の更新について 投稿日 : 2012/11/16(Fri) 10:50 投稿者 : 魔界の仮面弁士
OleDbCommandBuilder を使わず、自分で INSERT 文を作成しているのですね? > ※ Checkの項目をはずして更新するとうまくいきます。 "Check"という「列名」が原因です。 (同様の障害を起こす列名としては、"No" や "Update" などがあります) > strSQL = "INSERT INTO [StanderdM] " & _ > " (SubjectNo, ClassNo, Kind, Check) " & _ > " VALUES (?, ?, ?, ?)" "( [SubjectNo], [ClassNo], [Kind], [Check]) " のように、 それぞれの列名を角括弧で囲めば、もしくは、Check という フィールド名を改名することで解決するかと思います。 以下、本題とは関係のない所に反応。 > strSQL = "INSERT INTO [StanderdM] " & _ 「StanderdM」ではなく、 「StandardM」なのでは? > Private StanderdMDs As New DataSet > StanderdMDs = New DataSet > Private StanderdMDt As New DataTable > StanderdMDt = StanderdMDs.Tables("StanderdM") この使い方なら、変数宣言時に New する必要は無いかと。 > dtrow("SubjectNo") = cboBox1.SelectedValue.ToString() SubjectNo は「長整数型」なのですよね。 自動的に型変換されるとはいえ、Int32 を必要としているフィールドに String を代入するというのは違和感が…。 > dtrow("Kind") = 20 バイト型に Int32 を代入しているようですが、こちらは許容範囲。 > If chkBox3.CheckState = 0 Then これはおかしいです。 そもそも CheckState は、3状態チェックボックス(ThreeState)で 使われるべきプロパティです。True / False の 2状態なら、 dtrow("Check") = chkBox3.Checked のように、Checked As Boolean なプロパティを用いるべきかと。 仮に、CheckState プロパティを使う必要があるとしても、 「If chkBox3.CheckState = CheckState.Unchecked Then」 のように、CheckState 列挙体と比較するのが妥当です。 |