テーブルを更新できない

解決


まちこ  2006-10-18 10:19:22  No: 133775

・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(今日の場合です)」が表示されるのですが、実際にはテーブルに値が入ってくれません。
なにか見落としがあるのではないかと思うのですが、
何度みてもわからず、質問させていただきました。

申し訳ありませんが、どなたか助けてください。
宜しくお願いいたします。


魔界の仮面弁士  2006-10-18 11:26:41  No: 133776

> 上位1000件だけにフラグ1と日付を
> 入れようとしています。
であれば、SELECT TOP 1000 〜 FROM 〜 の形式の方が良いかも。

> Rs.Open SQLstr, cn, adOpenDynamic, adLockBatchOptimistic
何故、わざわざ動的カーソルにしているのでしょう…? (^^;

> 実際にテーブルを見てみるとNULLのままです。
そりゃまぁ、バッチカーソルモードで開いていますし。

CursorLocation / CursorType / LockType の 3 つのプロパティの意味と
その組み合わせに付いて、ヘルプで再確認してみてください。


まちこ  2006-10-20 07:16:06  No: 133777

魔界の仮面弁士さま

レスありがとうございました。
確認して、無事更新することができました。

本当に、何を確認していたのやらと自分に脱力してしまいました・・・。
でも、たぶん自分では「ここは合ってる」と思い込んでしまっていたので気付けなかったと思います。助かりました。本当にありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加