Access VBAで用いられているEOF(End Of File)プロパティにつきまして


今、とあるテーブルに対して処理を施しているAccess VBAのコードがあるのですが。
https://gist.github.com/AuroraNorthernQuarter/2ff16e49a84763b839c43edc4795e0b4
具体的に、特にEOFプロパティが何の目的で用いられているかがしっかりと把握できず、頭を抱えております。
大雑把に「テーブルにデータを書き込んでいる処理だろう」というように認識はしているのですが…。
3つほど疑問があります。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2020/07/03 09:40:53
id:moon-fondu

【1】「Do While Not EOF(1)」というループがあります。これはどういうループなのでしょうか?"EOF(1)"という書き方も初めて見ました…。
また"Not"が前につくことで、どういう意味が付与されるのでしょうか。

【2】「Line Input #1,vSt」という箇所は、何をしているのでしょうか?

【3】「If aquarium.EOF or IsNull(aquarium.fields(0).value)」についてなのですが、どういう条件式でしょうか?「aquarium.EOF」は、「指定したレコードセット上で、最後のデータが入っている行(レコード)の場合」という認識でよろしいでしょうか?
「IsNull(aquarium.fields(0).value)」の方は、Fields(0)…「0行目がNullの場合」という認識でよろしいでしょうか?

お手隙の時にお力添えいただけますと幸いです。よろしくお願い致しますm(__)m

ベストアンサー

id:a-kuma3 No.1

回答回数4848ベストアンサー獲得回数2090

ポイント1200pt

[1] と [2] をまとめて。
GitHub の載せたソースで省略しているところに、Open 文が書かれているはずです。
テキストファイルから、一行ずつデータを読み込んでいくときの書き方です。

  1. テキストファイルを開いて(ソースで省略されているところにあるはず
  2. テキストファイルの最後の行まで(Do While
  3. 一行読み込んで、変数 vSt に代入する(Line Input

"vba open line input" みたいな感じでググると、情報が引っかかります。
http://officetanaka.net/excel/vba/file/file08b.htm



[3] について。
Recordset の EOF プロパティは、「もうデータがなくなったら」を意味します。

https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-eof-property-dao

よくある使い方としては、ある SQL を実行して、一行ずつデータを処理していく場合でしょう。
GitHub に載せたソースの書き方であれば、「一件もデータがなかったら」と読んだ方がしっくりくると思います。

他1件のコメントを見る
id:a-kuma3

EOF(1) の話。

Open me.txtFilename for input as #1
Do While Not EOF(1)
Line Input #1,vSt
Close #1

↑の赤い文字にしたのが、ワンセットなんです。
上記だと、ファイル番号は 1 です。

複数のファイルを同時に扱いたい場合もあるので、その場合には別のファイル番号を指定して扱います。

Open ... as #2
Line Input #2, ...


https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/open-statement


もう1つの条件の「IsNull(aquarium.Fields(0).Value)」の方なのですが。

こちらの方。
正確に言えば、「Select 文で指定した列の一番目」です。

GitHub のソースの最初の方は、

tSQL = "select max(並び順) from リアルタイム情報"

ですから、max(並び順) が Null の場合、です。
SQL の Max 関数が Null を返すことはあるんかいな、という感じはしますが。
https://docs.microsoft.com/ja-jp/office/vba/access/concepts/criteria-expressions/min-max-functions-microsoft-access-sql

# つまり、IsNull で判定している方は、あのソースだと意味がないんじゃないかと。

2020/07/01 13:16:03
id:moon-fondu

"(1)"はファイル番号だったんですね。
てっきりテーブルの列や行が何番目かを示すのかという情報と勘違いしておりました。
fieldオブジェクトの解説もありがとうございます。
よく見かけるのですが、なかなか慣れないです。

確かに最大値がNullというのは違和感ありますね…。

ありがとうございました。

2020/07/03 09:40:35

その他の回答0件)

id:a-kuma3 No.1

回答回数4848ベストアンサー獲得回数2090ここでベストアンサー

ポイント1200pt

[1] と [2] をまとめて。
GitHub の載せたソースで省略しているところに、Open 文が書かれているはずです。
テキストファイルから、一行ずつデータを読み込んでいくときの書き方です。

  1. テキストファイルを開いて(ソースで省略されているところにあるはず
  2. テキストファイルの最後の行まで(Do While
  3. 一行読み込んで、変数 vSt に代入する(Line Input

"vba open line input" みたいな感じでググると、情報が引っかかります。
http://officetanaka.net/excel/vba/file/file08b.htm



[3] について。
Recordset の EOF プロパティは、「もうデータがなくなったら」を意味します。

https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-eof-property-dao

よくある使い方としては、ある SQL を実行して、一行ずつデータを処理していく場合でしょう。
GitHub に載せたソースの書き方であれば、「一件もデータがなかったら」と読んだ方がしっくりくると思います。

他1件のコメントを見る
id:a-kuma3

EOF(1) の話。

Open me.txtFilename for input as #1
Do While Not EOF(1)
Line Input #1,vSt
Close #1

↑の赤い文字にしたのが、ワンセットなんです。
上記だと、ファイル番号は 1 です。

複数のファイルを同時に扱いたい場合もあるので、その場合には別のファイル番号を指定して扱います。

Open ... as #2
Line Input #2, ...


https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/open-statement


もう1つの条件の「IsNull(aquarium.Fields(0).Value)」の方なのですが。

こちらの方。
正確に言えば、「Select 文で指定した列の一番目」です。

GitHub のソースの最初の方は、

tSQL = "select max(並び順) from リアルタイム情報"

ですから、max(並び順) が Null の場合、です。
SQL の Max 関数が Null を返すことはあるんかいな、という感じはしますが。
https://docs.microsoft.com/ja-jp/office/vba/access/concepts/criteria-expressions/min-max-functions-microsoft-access-sql

# つまり、IsNull で判定している方は、あのソースだと意味がないんじゃないかと。

2020/07/01 13:16:03
id:moon-fondu

"(1)"はファイル番号だったんですね。
てっきりテーブルの列や行が何番目かを示すのかという情報と勘違いしておりました。
fieldオブジェクトの解説もありがとうございます。
よく見かけるのですが、なかなか慣れないです。

確かに最大値がNullというのは違和感ありますね…。

ありがとうございました。

2020/07/03 09:40:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません