スキップしてメイン コンテンツに移動

投稿

ラベル(VBA)が付いた投稿を表示しています

Access adpのVBAでTransferTextを使いCSVファイルをインポートするとエラーになる場合がある。

タイトルのように、Access adpファイルでVBAに   DoCmd.TransferText acImportDelim    を使いCSVファイルをインポートしようとするとエラーになる場合がある。   実は、Access2003くらいからずっとこの問題に悩まされていて、インポート中に以下のようなメッセージが出てエラーになることがある。       「バリアント型でない変数にNull値を代入しようとしました」       読み込むCSVのファイルは、毎週1回更新用に提供されるもので、週によって上記のエラーが出たり出なかったりする。   よくわからないのは、エラーとなっても、手動でインポートをやるとエラーにならず上手くインポートできてしまうということ。   読み込むテーブルの各列の NULLを許容 の属性にチェックを入れてもエラーになる時はなる。   何行目のデータでエラーが起きているのかの情報もないのでどのデータが悪いのかもよくわからない。   そんなわけで、エラーが出た時は、手動でインポートして対応していました。       ここで、インポート定義を使えばいいのではと思われる方もいるとは思いますが、apd では仕様上インポート定義が使えないようです。       それで、ここからは私の推測なんですが、apd の環境で、DoCmd.TransferText acImportDelim 実行する場合は、コマンド実行に先立って、インポートするCSVのファイルをダミーで読んで各列のデータ型を決めているのでは・・・・。それで実際に読んだ時にダミーの読んだ時の型と不一致なデータが出現した場合にエラーとなるのではないか・・・・。   という推測です。間違っていたらご指摘ください。       では、どう解決すればいいのかと、いろいろ調べてみると、やはり、地道にVBAの標準のI/Oを使って読み込むのが確実なようです。   以下に、サンプルコードを抜粋しておきますので...

なにっ! Access2013からadpが使えなくなった・・・・?。

 会社である検索業務を Access 2007 の adp をフロントエンドにして SQL Server 2012 につなげて行っているのですが、   今日、ふと調べ物をしてると、Access 2013からadpが廃止されたことを知った、 (知っている方、今更ですいません(^^ゞ)   http://office.microsoft.com/ja-jp/access-help/HA102749226.aspx       う~ん、困ったな、全面的に VB.net に書き換えるかな・・・?。   まあ、まだ時間があるからもう少し調べてみよう・・・。   とりあず、Access2013はなるべくインスールさせないで Access 2007 Runtimeを インスールして、Access 2007のadpを延命させとくか・・・・。   このタイミングで、気がついてよかった☆。   しかも、数年前、基幹システムをオープン化するときに、   SQL Server + Access adp       を選択しなくて良かったと心底思う。。。。。(汗)