- 締切済み
VB2008、Insertのループをかけたいのですが・・・
初の質問になりますが、よろしくお願いします。 現在、VB2008にて、DataGridViewに入力した内容を、Insertで登録処理をするという作業を行っているのですが、変わった現象が起きてしまうのです。 まず、ボタンクリックのイベントで、DataGridViewの内容を一行づつ取り込み、Insertのループを行うと言うものなのですが、 DataGridViewにある列は、'日付','出勤時間',退社時間','~~と続くのですが、日付だけしか一行づつ取り込めず、それ以外の列項目は、値の入っている列までしか取り込めないんです。 たとえば、二行目まで値を入れ、三行目からはすべてのCellをNullの状態にしてInsertのループをかけると、二行目にしか入らない値が、三行目以降まで続いてしまうんです。これってどういうことでしょうか、、、ちなみに日付だけはきちんとInsertされるのです。どなたかお分かりになる方いらっしゃらないでしょうか。 ちなみにこれがソースです。 For r As DataGridViewRow in DataGridView1.Rows 日付 = DataGridView1(0, r.Index).Value If IsDBNull (DataGridView1(9, r.Index).Value) = False Then 出勤時間 = DataGridView1(9, r.Index).Value Else If IsDBNull(DataGridView1(5. r.Index).Value) = False Then 出勤時間 = "0" End If '列が多いので、省略します。 'ここからInsert sql = "Insert into Time Seet" sql &= "Values (" sql &= "'" & 日付 & "'" : : Next r という形です。列が長いので、だいぶ省略しましたので伝わりにくいかと思いますが、よろしくお願いします。 ちなみに他のサイトでは、 ループの外側でパラメータクエリを作成して、ループの中ではパラメータの設定とSQLの実行のみにすればよいです。 と言われましたが、パラメータクエリというのがイマイチ理解できなかったので・・・ できればそれらに関する情報や考え方なども教えてくださるとうれしいのですが・・・よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ple_mania
- ベストアンサー率42% (9/21)
こんにちは。 ご提示のソースで示しますが、 If IsDBNull (DataGridView1(9, r.Index).Value) = False Then 出勤時間 = DataGridView1(9, r.Index).Value Else If IsDBNull(DataGridView1(5. r.Index).Value) = False Then 出勤時間 = "0" End If という条件処理は IsDBNull(DataGridView1(9, r.Index).Value) :DataGridView1(9, r.Index).Value IsDBNull(DataGridView1(5, r.Index).Value) :0 else :何もしない ということになりませんか? 出勤時間というエリアはDataGridViewとは別のエリアですよね。 であれば、一度セットした値は自分でクリアしない限り消えない はずです。 この観点でソース全体を見直されてみてはいかがでしょう。
- ple_mania
- ベストアンサー率42% (9/21)
こんにちは。 とりあえずですが気になったところを。 日付は常にDataGridViewからとっていますが、他は判断が入っている のですね。出勤時間がDBNullとなった場合に前回の値が残っている、 ということはないですか? どうもご提示のソースからはそんな風に見えるのですが。 パラメタライズドクエリとはWhere条件とか、Insertの値とかを 例えば@PARM01みたいに書いておいて、後から値を割り当てるという 方法をいいます。かなりはしょった説明ですが、説明は色んな サイトにあると思われるメジャーな話なので調べてみてください。
補足
>ple_mania様、 夜遅くに申しわけありません。 >出勤時間がDBNullとなった場合に前回の値が残っている、 ということはないですか? という質問ですが、確かにそうなんです。と言いますか、それの対処法が一番知りたかった部分でもあるんです。どうすれば回避できるでしょうか...