- ベストアンサー
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がおかしいと思うのですが 他のところかもしれませんが悩んでいます。 この内容でわかっていただけるか心配ですが よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
レコードを読んで、更新をかけるのであれば、 コネクションのExecuteメソッドではなく、レコードセットのUpdateメソッドを使わなくてはなりません。 Executeメソッドの戻り値は、レコードセットオブジェクトじゃありませんので、「Set rs = cn.Execute("UPDATE テーブル名 SET ID = ***** ") 」でおかしなこと(エラーになるんじゃ?)になっていると思うのです。 レコードを読む必要がないのであれば、Executeだけで良いですよ。
その他の回答 (2)
2つ目のループがおかしいですね。 ループではrsを回していますが、その中でrsを使って別のレコードセットを取得しちゃってます。 rs以外の変数を使ってみて下さい。
お礼
ありがとうございました。まだまだ勉強不足でわからないことばかりで 理解するのも一苦労ですが、昨日うまく動作しました。本当に助かりました。
- Hayashi_Trek
- ベストアンサー率44% (366/818)
テストできる環境が無いので間違ってるかもしれませんが レコードセットrsを使用して処理を進めているのに Set rs = cn.Execute("UPDATE テーブル名 SET ID = ***** ") とするとrsが初期化(というか新規作成)されてしまうのでは?
お礼
テストできる環境ではないのに回答していただきありがとうございました。 昨日うまく動作しました。本当に助かりました。
お礼
ありがとうございました。昨日うまく動作しました。 今回で少し理解しました。本当に助かりました。