- PR -

データセットを使ったデータ削除

1
投稿者投稿内容
どら
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 63
投稿日時: 2006-07-28 12:12
vs2005 vb win xp

いつも拝見させていただいております。

1つ質問があります。今、データセットをループで回して、削除flgがたっているものを削除するという処理をいれております。

lng_Delcnt = Me.BindingContext(g_obj_DataSet, "Tb_××").Count

For lng_Deldscnt = 0 To lng_Delcnt
If g_obj_DataSet.Tables("Tb_××").Rows(lng_Deldscnt)("削除FLG") = True  Then
'削除チェック項目にチェックがついていた場合
g_obj_DataSet.Tables("Tb_××").Rows(lng_Deldscnt).Delete()
End If
Next

とループをかけているのですが、削除をした後のif文で、位置 2(場所によってかわる) に行がありませんと表示されてしまします。
データセットを削除することによって、データセットのmaxカウントが変わってしまい、その結果、データがないレコードにアクセスしようとして、エラーが起こってしまっているみたいです。

データを削除したときに、カウントを-1とかしてみてるのですが、それだとfor文がうまく回ってくれないのと、もっとスマートなやり方はないかなと思って投稿しました。

わかる方がいらっしゃいましたら、ご教授お願いいたします。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-07-28 12:50
前後の関係が分かりませんが、DELETE文を発行すればいいだけでは? と思うのは私だけでしょうか・・・
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-28 12:53
ForじゃなくてForeachを使ってみたらどうでしょう。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-07-28 13:03
こんにちは。

引用:

どっとねっとふぁんさんの書き込み (2006-07-28 12:53) より:

ForじゃなくてForeachを使ってみたらどうでしょう。


Foreach でも Delete をすると CurrentRow の位置が変わってしまっ
てダメだったような気がします。むしろ Foreach の方がそのあたり面倒だっ
たような。

自分だったら、逆に lng_Delcnt から 0 へのループを作ります。
(そうすれば Delete しても lng_Deldscnt の位置は変わらないので)
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
どら
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 63
投稿日時: 2006-07-28 14:12
ひろれいさん、どっとねっとふぁんさん、ぽぴ王子さん返答ありがとうございます。

lng_Delcnt から 0へのループでうまくいきました。

lng_Delcntから0へループさせるなんて思いもつきませんでした。

勉強になりました。ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)