質問編集履歴

1

「質問への追記・編集依頼」でのご指摘に応じ追記いたしました。

2022/02/10 17:46

投稿

kujiraSE
kujiraSE

スコア21

test CHANGED
File without changes
test CHANGED
@@ -90,3 +90,25 @@
90
90
  教えていただきたいのですが、そもそも、これは解決法として妥当だったのでしょうか?
91
91
  こういう場合、ループ内で毎回データファイルとの接続と解除を行うべきなのでしょうか?
92
92
  接続はそのままでデータセットの取得と放棄だけを繰り返すのは何か問題なのでしょうか?
93
+
94
+
95
+ **追記**
96
+ iruyas様、enii様から、adLockOptimisticの使い方に問題があるのではないか、というご指摘がありました。
97
+ たしかに私は、この、レコードセットの取得方法について何も考えずにコピペしたコードですませていたのですが、今回のエラーの原因がこの取得タイプの間違いによるものであるのかどうか、まだ理解しきれていません。
98
+
99
+ 私が作ったコードのながれは、
100
+ - (1)データベースファイルと接続する
101
+ - (2)接続したデータベースから、SQLを発行してレコードセットを取得する(adLockOptimistic指定)
102
+ - (3)取得したレコードセットからフィールドの値を取り出してセルに書き出す
103
+ - (4)レコードセットを手放す(set RS = nothing)
104
+ - (5)データベースファイルとの接続を切断する
105
+ という流れのなかで、(2)から(4)をループさせていました。
106
+ これがうまくいかなくなって(1)から(5)までをループさせたらうまくいったという状態です。
107
+
108
+ 「一度に持てるデータの量は決まっている。無駄にデータを持たせないように、ReadOnlyでいいのかLockしかないのか考えるべき」というご指摘でしたが、
109
+ 私としては、レコードセットを1ループごとに取得してはすぐ解放してるのだから、1度に持っているデータは1レコードセット分だけなのに、と考えてしまいます。
110
+ 取得したレコードセットからひとつフィールドの値をもらったらすぐにそのレコードセットを手放してるつもりなのですが、そうなってはない=つまり(4)でレコードセットを手放しているつもりでも、実は何かが手元に残っているということでしょうか?元のデータベースとの接続じたいを一旦切ってしまうか、あるいはReadOnlyで取得したレコードセットならちゃんと手から離れてくれる、ということなのでしょうか?
111
+
112
+
113
+
114
+