MoveNext


jj  2006-01-11 22:44:19  No: 129488

MoveNextだと削除したレコードを読み飛ばせないのですが
削除されたレコードを飛ばして次のレコードを読むことってできますか?

○1000
○1001
×1002
○1003


jj  2006-01-11 23:19:44  No: 129489

Do Until obj.EOF

obj.MoveNext

で呼んでいますが、上記の例で言うと
1000と1001は読み出せますが1002で止まってしまいます。
なにか解決策はありますでしょうか。。


kk  2006-01-11 23:44:22  No: 129490

・なにか解決策はありますでしょうか。。
⇒データベースから削除されたレコードが読み出せてしまうということは
  コミット忘れじゃないの?

・止まってしまいます。
という表現はフリーズでしょうか?
それともエラーメッセージが表示されるのでしょうか?

いずれにせよ不親切です。


特攻隊長まるるう  2006-01-11 23:53:41  No: 129491

>・なにか解決策はありますでしょうか。。
>⇒データベースから削除されたレコードが読み出せてしまうということは
>  コミット忘れじゃないの?
ローカルの RecordSet とデータベースの内容が違うとか、
基本的なことを実行して無い可能性なんて無限にあるねw。
そもそも変数の識別子 Object 型だし、何の説明もないから
何のオブジェクトを使ってるかという時点から説明不足。

世の中に EOF で判定して MoveNext の命令を持ってる
オブジェクトは複数存在します。自分が知らないだけですので
説明は状況が伝わるように詳細まで行ってください。

タイトルも不適切です。投稿時の注意を読んでください。


jj  2006-01-11 23:55:38  No: 129492

フリーズやエラーなのではなく、
1000と1001しか読み出せないということです。すみません。

削除というか、飛番のレコードを読み出したいのですが・・・


jj  2006-01-12 00:10:11  No: 129493

Set objCon = Server.CreateObject("ADODB.Connection")
objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, objCon, 3
b=b+1
  Do Until objRS.EOF
    db_product_id(b) = CStr(objRS("id").value)
  obj.MoveNext

Loop

DBの内容####
id
1000
1001
1003

上記のDBから呼び出せているのが1000と1001だけです。
そこで1003を呼び出したいのですが・・・

ちなみに
DBの内容####
id
1000
1001
1002
1003

にすると1000から1003まで呼び出すことができます。。

まだわかりにくいかとは思いますがなにとぞご教示お願いいたします。。


特攻隊長まるるう  2006-01-12 00:49:07  No: 129494

具体的に strSQL に入っている文字列は?


nameless  2006-01-12 00:59:20  No: 129495

Set objCon = Server.CreateObject("ADODB.Connection")
objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, objCon, 3
b= 0
  Do Until objRS.EOF
    db_product_id(b) = CStr(objRS("id").value)
    b=b+1
  obj.MoveNext

Loop


通りすがりその2  2006-01-13 02:32:20  No: 129496

配列の大きさが気になる。。。

  b = 0
  ReDim db_product_id(0 To b)

  Do Until objRS.EOF
    Redim Preserve db_product_id(0 To b)
    db_product_id(b) = CStr(objRS("id").value)
    b=b+1
  obj.MoveNext


特攻隊長まるるう  2006-01-13 03:54:09  No: 129497

確かにループで b を変更して無いのはかなり謎なコードなんだけど
それだと飛び番どころか1レコードしか取得できないはず…。
じつはループはダミー(謎)で b は Static で Redim も他の場所で
やってて(もしくは初期化時に充分な大きさとってて)この処理って
WHERE id = 1000 とかの条件でレコードを1個だけ読み込む処理
なんじゃないかというわけわからん予想も捨てきれない今日この頃。

もしくはループが空回りして最後のレコードだけを格納する
これまた謎な処理で実は提示したコードはあってて、ORDER BY
でレコードの順番の保証してなくってレコード削除後のループ
空回りで最後のレコードが不定だとか…。

そんなんだったら人間不信になるよねw


なな  2006-01-13 04:59:00  No: 129498

Redim Preserve db_product_id(0 To b)

RedimのPreserveって

Redim Preserve db_product_id(Ubound(db_product_id) + 1)

とかやるのが枯れたやりかたの気がするんだけれども


なな  2006-01-13 05:00:29  No: 129499

そうなると、格納部分は

db_product_id(Ubound(db_product_id)) = CStr(objRS("id").value)

だね、


ガッ  2006-01-13 05:27:11  No: 129500

Preserveで1ずつ拡張するのは遅くてダメぽ…
クラスでラップするかCollectionをオヌヌヌします  ('A`)


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

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






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