タイトル : Re^2: VB2010よりアクセスのデータ型YES/NO型の更新について 投稿日 : 2012/11/16(Fri) 14:19 投稿者 : かっちゃん
> 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 列挙体と比較するのが妥当です。 魔界の仮面弁士 様 更新できました。 ありがとうございました。 VB6.0からの変換で色々変更されておりまして苦労しております。 更新の方も"OleDbCommandBuilder"を使わずにロジックをくんでおります。 列名の制限には気づかず、何度もロジックを変えて困っているところでした 本当に助かりました。 また、他のロジックも指摘いただき、すべて修正いたしました 感謝・感謝です。 今後もよろしくお願いいたします。 かっちゃん より |