Access98と2000でのVBAの挙動の違い (項目初期化)
Dim CatalogMaster As InData Open "c:\hoge\hogehoge.txt" For Random As #Fno Len = Len(CatalogMaster) Do Until EOF(Fno) Get #Fno, , CatalogMaster With CatalogMaster 項目1 = Trim(.項目1) 項目2 = Trim(.項目2) 項目3 = Trim(.項目3) End With 'この後に項目1〜3の内容チェックとDB登録 Loop
※ InDataは標準モジュールとして定義済みとする
Access98だとこの処理で問題なかったのだが、Access2000だとそれぞれの項目の末尾におかしなゴミが入ることがあった。
例: 「あいうえおかきくけこはひ」
正: 「あいうえおかきくけこ」
データをチェックしてみたところ、どうやらそれよりいくつか前に「たちつてとなにぬねのはひ」というデータがあったらしい。
たちつてとなにぬねのはひ
…… 間に
…… いくつか
…… データがある
あいうえおかきくけこ
要するに項目の初期化が上手くいってなくて、そこに前よりも文字数の少ない内容が入ると重なった感じの内容になってしまっていたらしい。必ずしも全パターンでそれが発生している訳でもなかったのがよく分からないのだが。
とりあえずLoopの前に
With CatalogMaster .項目1 = "" .項目2 = "" .項目3 = "" End With
を入れることで対処。
次のデータを読み込めば前のデータは上書きされる気がするが、「初期化 → 上書き」(Access98)なのか「単なる上書き」(Access2000)なのかは大きな違いがあるという訳だ。
そういえばプログラマ(COBOL/S)時代に「"初期化されるはず"と思わないで、明示的に初期化しろ」と教わったっけ。
ちなみに元のコードは、自分の書いた訳ではないのであしからず。