見出し画像

[VBA]なぜ、クエリの取得結果の最初にMoveNextするのか。【バグじゃない】

どうも、お久しぶりです。半ちゃんです。

相変わらず、ネタが思いつかなかったのですが、前こんなことを書いている記事を見つけたので、初心者の方が勘違いしたらいけないので載せておきます。

このサイトなのですが、
https://www.petitmonte.com/excel/excel2016_query_vba.html

なぜ、24行目の「MoveNext」がないと実行できないのかは不明です。もしかすると「バグ」なのかもしれません。

もう4年も前なんで今更注意して直させるのも気が引けるのが、ライターさんが見つけてくれることを祈って書きます。

なぜ、MoveNextする必要があるのか、それは

データ件数が0だったとき用に最初はヘッダーにカーソルがあるからです。

カーソルとは➡のことです。いまいくつ目のデータを指しているかをさしています。このディレクションは最初こんな風になっています。

テーブルイメージ2

MoveNextによって、このカーソルを下にずらして1件ずつ取り出すのがデータベースのセオリーです。

テーブルイメージ

でも、いつも必ずデータがあるわけではありません。間違えてあるはずのないデータを取ってこようとするがありえます。
そんなとき、もしカーソルがないものを指していたら...と思うとゾッとします((+_+))
お化けでもいたかのような気分です。

そうならないために、取得結果は最初ヘッダーを置いているのです。

ヘッダーは取得結果ではないため、ヘッダーのデータを取得しようとするとエラーになります。

なので、決してバグではありません。仕様です。
この仕様はどの言語でも通用します。なので、よ~く覚えておいてください。でも、フレームワークとか使うとこのことを気にせずにDBを扱えます。

では、また何か思いついたらお話しします。

【PR】初心者さんの疑問、受け付けてます。良かったら気軽にご質問ください。

この記事が気に入ったらサポートをしてみませんか?