アプリ版:「スタンプのみでお礼する」機能のリリースについて

初の質問になりますが、よろしくお願いします。
現在、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の実行のみにすればよいです。
と言われましたが、パラメータクエリというのがイマイチ理解できなかったので・・・
できればそれらに関する情報や考え方なども教えてくださるとうれしいのですが・・・よろしくお願いします。

A 回答 (2件)

こんにちは。


ご提示のソースで示しますが、
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とは別のエリアですよね。
であれば、一度セットした値は自分でクリアしない限り消えない
はずです。

この観点でソース全体を見直されてみてはいかがでしょう。
    • good
    • 0

こんにちは。



とりあえずですが気になったところを。
日付は常にDataGridViewからとっていますが、他は判断が入っている
のですね。出勤時間がDBNullとなった場合に前回の値が残っている、
ということはないですか?
どうもご提示のソースからはそんな風に見えるのですが。

パラメタライズドクエリとはWhere条件とか、Insertの値とかを
例えば@PARM01みたいに書いておいて、後から値を割り当てるという
方法をいいます。かなりはしょった説明ですが、説明は色んな
サイトにあると思われるメジャーな話なので調べてみてください。

この回答への補足

>ple_mania様、
夜遅くに申しわけありません。
>出勤時間がDBNullとなった場合に前回の値が残っている、
ということはないですか?
という質問ですが、確かにそうなんです。と言いますか、それの対処法が一番知りたかった部分でもあるんです。どうすれば回避できるでしょうか...

補足日時:2009/04/05 00:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!