MoveNextだと削除したレコードを読み飛ばせないのですが
削除されたレコードを飛ばして次のレコードを読むことってできますか?
○1000
○1001
×1002
○1003
Do Until obj.EOF
obj.MoveNext
で呼んでいますが、上記の例で言うと
1000と1001は読み出せますが1002で止まってしまいます。
なにか解決策はありますでしょうか。。
・なにか解決策はありますでしょうか。。
⇒データベースから削除されたレコードが読み出せてしまうということは
コミット忘れじゃないの?
・止まってしまいます。
という表現はフリーズでしょうか?
それともエラーメッセージが表示されるのでしょうか?
いずれにせよ不親切です。
>・なにか解決策はありますでしょうか。。
>⇒データベースから削除されたレコードが読み出せてしまうということは
> コミット忘れじゃないの?
ローカルの RecordSet とデータベースの内容が違うとか、
基本的なことを実行して無い可能性なんて無限にあるねw。
そもそも変数の識別子 Object 型だし、何の説明もないから
何のオブジェクトを使ってるかという時点から説明不足。
世の中に EOF で判定して MoveNext の命令を持ってる
オブジェクトは複数存在します。自分が知らないだけですので
説明は状況が伝わるように詳細まで行ってください。
タイトルも不適切です。投稿時の注意を読んでください。
フリーズやエラーなのではなく、
1000と1001しか読み出せないということです。すみません。
削除というか、飛番のレコードを読み出したいのですが・・・
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まで呼び出すことができます。。
まだわかりにくいかとは思いますがなにとぞご教示お願いいたします。。
具体的に strSQL に入っている文字列は?
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
配列の大きさが気になる。。。
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
確かにループで b を変更して無いのはかなり謎なコードなんだけど
それだと飛び番どころか1レコードしか取得できないはず…。
じつはループはダミー(謎)で b は Static で Redim も他の場所で
やってて(もしくは初期化時に充分な大きさとってて)この処理って
WHERE id = 1000 とかの条件でレコードを1個だけ読み込む処理
なんじゃないかというわけわからん予想も捨てきれない今日この頃。
もしくはループが空回りして最後のレコードだけを格納する
これまた謎な処理で実は提示したコードはあってて、ORDER BY
でレコードの順番の保証してなくってレコード削除後のループ
空回りで最後のレコードが不定だとか…。
そんなんだったら人間不信になるよねw
Redim Preserve db_product_id(0 To b)
RedimのPreserveって
Redim Preserve db_product_id(Ubound(db_product_id) + 1)
とかやるのが枯れたやりかたの気がするんだけれども
そうなると、格納部分は
db_product_id(Ubound(db_product_id)) = CStr(objRS("id").value)
だね、
Preserveで1ずつ拡張するのは遅くてダメぽ…
クラスでラップするかCollectionをオヌヌヌします ('A`)
ツイート | ![]() |