[VBA]なぜ、クエリの取得結果の最初にMoveNextするのか。【バグじゃない】
どうも、お久しぶりです。半ちゃんです。
相変わらず、ネタが思いつかなかったのですが、前こんなことを書いている記事を見つけたので、初心者の方が勘違いしたらいけないので載せておきます。
このサイトなのですが、
https://www.petitmonte.com/excel/excel2016_query_vba.html
なぜ、24行目の「MoveNext」がないと実行できないのかは不明です。もしかすると「バグ」なのかもしれません。
もう4年も前なんで今更注意して直させるのも気が引けるのが、ライターさんが見つけてくれることを祈って書きます。
なぜ、MoveNextする必要があるのか、それは
データ件数が0だったとき用に最初はヘッダーにカーソルがあるからです。
カーソルとは➡のことです。いまいくつ目のデータを指しているかをさしています。このディレクションは最初こんな風になっています。
MoveNextによって、このカーソルを下にずらして1件ずつ取り出すのがデータベースのセオリーです。
でも、いつも必ずデータがあるわけではありません。間違えてあるはずのないデータを取ってこようとするがありえます。
そんなとき、もしカーソルがないものを指していたら...と思うとゾッとします((+_+))
お化けでもいたかのような気分です。
そうならないために、取得結果は最初ヘッダーを置いているのです。
ヘッダーは取得結果ではないため、ヘッダーのデータを取得しようとするとエラーになります。
なので、決してバグではありません。仕様です。
この仕様はどの言語でも通用します。なので、よ~く覚えておいてください。でも、フレームワークとか使うとこのことを気にせずにDBを扱えます。
では、また何か思いついたらお話しします。
この記事が気に入ったらサポートをしてみませんか?