ACCESS VBAで固定長テキストを取り込むと1行目が読み込まれない!

みなさん、おはようございます、こんにちは、こんばんは。

転職できなかった52歳社内SEのおぐです。

ACCESSのバグを見つけてしまいました。

テキストファイルの1行目が取り込まれません。

手動で外部データのインポート処理をすると取り込まれますが、VBAで処理すると1行減っています。

しかし、ネットで調べても、そんなこと書かれていません。

何かプログラミングで間違っているのでしょうか?

 

スポンサーリンク

Access VBAで固定長テキストファイルをインポート

ペーパーレス

Access VBAを使って開発したアプリで、固定長のテキストデータやCSVファイルの取り込みには、DoCmd.TransferTextメソッドを使っています。

簡単なんで、愛用しています。

特にCSVファイルを取り込んで加工する処理が多いので、定型モジュールみたいな形になっていて、使いまわししています。

ちなみに、エクセルでテキストファイルを開く時は注意が必要です。

慣れ、なんでしょうね。

私はエクセルで処理するよりも、アクセスの方が効率良く作業できます。

扱うデータ件数にもよりますが、数千件のデータを処理するなら、アクセスに取り込んで加工してしまいます。

 

HasFieldNamesが効かない

マニュアル

先日開発したアプリで不具合が報告されました。

テキストファイルの1行目が取り込まれないということです。

固定長テキストファイルをインポートする時、DoCmd.TransferTextメソッドは以下のように使っています。

DoCmd.TransferText acImportFixed, インポート定義名, インポート先のテーブル, インポートするファイル名, 見出し

ファイルの1行目に見出しがあるかないか指定できるのですが、この項目を"True"にしても"False"にしても、実際に取り込まれたデータを確認すると1行目が取り込まれないということがわかりました。

そもそも規定値が"False(見出し無し)"なのに、わざわざ"False"を指定しても、"True(見出し有り)"で動作してしまうのが納得いきません。

マイクロソフトのサイトをみると、Wordの差し込みファイルを出力する時は、必ず見出しが出力されると書かれていますが、エクスポートではなくインポートの処理です。

CSVファイルを取り込む時は、どうだったろう?

ACCESS2003の時は?

などと考えだしたらキリが無くなってしまうので、とりあえず対処することにしました。

 

TransferTextを使わずインポートする

残業

DoCmd.TransferTextメソッドを使わず、データをインポートする方法があります。

テキストファイルなので、オープンして1行ずつインプットし、テーブルに行追加して書き込んでいけば良いだけです。

しかし問題点があります。

書き込みするテーブルのフィールドが300以上あります。

テキストデータをフィールドに合わせて加工する処理が300以上必要になります。

テーブルの宣言なんかも含めると、結構なボリュームの変更が必要になります。

とりあえず対処するにしては、手間がかかりすぎます。

簡単に言うと「面倒くさい」

もっと、ちゃちゃっと出来ることは無いでしょうか?

 

固定長テキストファイルの1行目に空行を追加

プログラマー

必ず1行目が読み飛ばされてしまうのであれば、読み込みファイルの1行目に空行を追加して、そのファイルをDoCmd.TransferTextメソッドを使って読み込めばいいんじゃないかと考えました。

出力側で変更できれば、それが一番なんですが、出力側はよそ様のシステムなので、お願いしていたのでは時間がかかります。

読み込みファイルに1行目に空行を追加するぐらいなら、修正するとしてもプログラムソースにして20行ぐらい追加すればOKです。

これなら簡単に済みそうです。

とりあえず、この方法で今回は対処することにしました。

根本的に変更する必要がありそうな時に大幅に改修することになるでしょう。

ここでめぐり逢えたみなさんにお願いです!

このブログは人気ブログランキングに参加しています。

応援してもらえると、とても喜んでもっと良い記事を書きますので、下のバナーをクリックしてください!


スポンサーリンク
おすすめの記事