• ベストアンサー

ODBCでMoveNextがうまく動作しないようなのですが

まだVB歴1年ないので説明もうまくできないかも知れませんが どなたか教えていただければ助かります。 Dim cn as ADODB.Connection Dim rs as ADODB.Recordset Set cn = New ADODB.Connection cn.IsolationLevel = adXactRepeatabelRead cn.Open ***** Set rs = New ADODB.Recordset rs.CursorType = adOpenDynamic rs.LockType = asLockPessimistic rs.ActiveConnection = cn rs.Open ***** 上記のように設定したのち データ読み込み rs.MoveFirst Do until rs.EOF aaa = rs.Fields("ID").Value    中略 rs.MoveNext Loop ファイルクローズして他の処理したのち 再びファイルオープンして rs.MoveFirst For *** Set rs = cn.Execute("UPDATE テーブル名 SET ID = ***** ") 中略 rs.MoveNext Next *** ファイルクローズ 上記のMoveNextがおかしいと思うのですが 他のところかもしれませんが悩んでいます。 この内容でわかっていただけるか心配ですが よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • amania
  • ベストアンサー率22% (2/9)
回答No.3

レコードを読んで、更新をかけるのであれば、 コネクションのExecuteメソッドではなく、レコードセットのUpdateメソッドを使わなくてはなりません。 Executeメソッドの戻り値は、レコードセットオブジェクトじゃありませんので、「Set rs = cn.Execute("UPDATE テーブル名 SET ID = ***** ") 」でおかしなこと(エラーになるんじゃ?)になっていると思うのです。 レコードを読む必要がないのであれば、Executeだけで良いですよ。

masa00
質問者

お礼

ありがとうございました。昨日うまく動作しました。 今回で少し理解しました。本当に助かりました。

その他の回答 (2)

noname#102878
noname#102878
回答No.2

2つ目のループがおかしいですね。 ループではrsを回していますが、その中でrsを使って別のレコードセットを取得しちゃってます。 rs以外の変数を使ってみて下さい。

masa00
質問者

お礼

ありがとうございました。まだまだ勉強不足でわからないことばかりで 理解するのも一苦労ですが、昨日うまく動作しました。本当に助かりました。

回答No.1

テストできる環境が無いので間違ってるかもしれませんが レコードセットrsを使用して処理を進めているのに Set rs = cn.Execute("UPDATE テーブル名 SET ID = ***** ") とするとrsが初期化(というか新規作成)されてしまうのでは?

masa00
質問者

お礼

テストできる環境ではないのに回答していただきありがとうございました。 昨日うまく動作しました。本当に助かりました。

関連するQ&A