初の質問になりますが、よろしくお願いします。
現在、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件)
- 最新から表示
- 回答順に表示
No.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とは別のエリアですよね。
であれば、一度セットした値は自分でクリアしない限り消えない
はずです。
この観点でソース全体を見直されてみてはいかがでしょう。
No.1
- 回答日時:
こんにちは。
とりあえずですが気になったところを。
日付は常にDataGridViewからとっていますが、他は判断が入っている
のですね。出勤時間がDBNullとなった場合に前回の値が残っている、
ということはないですか?
どうもご提示のソースからはそんな風に見えるのですが。
パラメタライズドクエリとはWhere条件とか、Insertの値とかを
例えば@PARM01みたいに書いておいて、後から値を割り当てるという
方法をいいます。かなりはしょった説明ですが、説明は色んな
サイトにあると思われるメジャーな話なので調べてみてください。
この回答への補足
>ple_mania様、
夜遅くに申しわけありません。
>出勤時間がDBNullとなった場合に前回の値が残っている、
ということはないですか?
という質問ですが、確かにそうなんです。と言いますか、それの対処法が一番知りたかった部分でもあるんです。どうすれば回避できるでしょうか...
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
エクセルの当番表を作っていま...
-
ネットワークループとルーティ...
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
画面を強制的に再描画させる方法
-
【VBA】指定の範囲から特定の文...
-
while(*s++=*t++)の判定は?
-
イベントの発生を待つ
-
Escキーを押すと、中断する時と...
-
GIFアニメをループさせたくない
-
UWSCの終了の仕方
-
「VC++6」ウィンドウの再描画
-
Java 南京錠
-
EXCEL VBA(初心者)印刷ルー...
-
磁気ループ装置の仕組みと作り方
-
VBA Dir関数でファイルをループ...
-
重複データをテーブルに表示し...
-
一巡伝達関数と開ループ伝達関数
-
CreateJS(TweenJS)での連続した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vb.netです。2次元配列の要素を...
おすすめ情報