・VB6.0
・SQLserver
お世話になっております。
全5000件のデータが入っているテーブルを「合計」が大きい順に開いて、上位1000件だけにフラグ1と日付を
入れようとしています。
イミディエイトにはそれがちゃんと反映されるのですが、実際にテーブルを
見てみるとNULLのままです。
-------------------------------------------------------
cn.BeginTrans
'合計の大きい順にテーブルを開く
SQLstr = "SELECT * FROM TABLE " & _
"ORDER BY Total DESC "
Set Rs = New ADODB.Recordset
Rs.Open SQLstr, cn, adOpenDynamic, adLockBatchOptimistic
Do Until Rs.EOF
Cnt = Cnt + 1
Debug.Print Rs.Fields("日付"), Rs.Fields("フラグ")
'乱数合計の上位1000件のみ
If Cnt <= 1000 Then
'上位1000件はFlg=1
Rs.Fields("フラグ") = 1
Rs.Fields("日付") = Date
Rs.Update
'処理件数表示
Lbl_Cnt.Caption = Cnt
DoEvents
Rs.Movenext
'上位1000件を超えたら終了
Else
Exit Do
End If
Loop
Rs.Close
Set Rs = Nothing
cn.CommitTrans
--------------------------------------------------
上記のようなソースで実行するとイミディエイトには「1」と「2006/10/17(今日の場合です)」が表示されるのですが、実際にはテーブルに値が入ってくれません。
なにか見落としがあるのではないかと思うのですが、
何度みてもわからず、質問させていただきました。
申し訳ありませんが、どなたか助けてください。
宜しくお願いいたします。
> 上位1000件だけにフラグ1と日付を
> 入れようとしています。
であれば、SELECT TOP 1000 〜 FROM 〜 の形式の方が良いかも。
> Rs.Open SQLstr, cn, adOpenDynamic, adLockBatchOptimistic
何故、わざわざ動的カーソルにしているのでしょう…? (^^;
> 実際にテーブルを見てみるとNULLのままです。
そりゃまぁ、バッチカーソルモードで開いていますし。
CursorLocation / CursorType / LockType の 3 つのプロパティの意味と
その組み合わせに付いて、ヘルプで再確認してみてください。
魔界の仮面弁士さま
レスありがとうございました。
確認して、無事更新することができました。
本当に、何を確認していたのやらと自分に脱力してしまいました・・・。
でも、たぶん自分では「ここは合ってる」と思い込んでしまっていたので気付けなかったと思います。助かりました。本当にありがとうございました!
ツイート | ![]() |