• ベストアンサー

Access97のインポートエラー

アクセス97で、インポート定義を使いデータをインポートしています。 重複を許可していない項目が重複して取り込まれると、『すべてのデータをテーブルに追加できませんでした。』というメッセージが表示されます。 メッセージは表示されるものの、そのまま続行すると重複していないデータは問題なく取り込まれ、重複しているデータは上書きされません。 この動き自体は問題ないのですが、デフォルトメッセージを表示せず、重複しているデータは上書きされないというオリジナルメッセージを出したいのです。 しかし、どうしてもエラー処理に引っかかりません。 Debug.Printでエラー番号を調べたところ、8050でしたが、エラー番号を指定してエラー処理をしても飛ばされてしまいます。 ただし、On Error Gotoには反応するのです。 Error()関数でメッセージボックスにエラーメッセージを表示させようとしても、メッセージボックスは表示されるのですが、何の文章も表示されずOKボタンのみが表示されている状態です。 文章では分かり難いかもしれませんが、もしお分かりになる方がいらっしゃいましたら、ぜひぜひご回答をお願いいたします。 できれば本日中に・・・。ムリ言ってすみません!(本日中までの仕事なのです。)

質問者が選んだベストアンサー

  • ベストアンサー
  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.3

んとね。  TransferTextを使用しているとの事ですが、使用している方法を教えて下さい。  『On Error Goto』を使用している所を見ると、マクロではなく、VBAをしようしているのですよね。  そのソース部分を提示して下さい。試して見て解決策を考えてくれる酔狂な人がいるかもしれません。  TransferTextのヘルプの最後に、『~メソッドを使う事が出来ますが、DAOを使う事をお薦めします。~』って記述があります。  ここは素直に、DAOを使って作った方が工数はかからずに出来ると思います。よ。そうすれば、クエリも使えるし、いろいろ手法が出てきますからね。  遅いのと、仕様未達では、どちらの方が印象が悪いか考えましょう。処理時間がかかるが、仕様を達成出来る代物と、重複するキーが無い時には仕様を達成出来るが、そうでない場合には、仕様未達では、前者の方がましだと思います。よ。  出来る事は出来るんですからね。  そこで....一つ考えてみました。 条件1.現在のコードは出来る限り変えたくない。 条件2.エラーメッセージを出したい。 手順案1 1.現在のインポート先と同じ定義を持つテーブルを、キーの重複を許可して作成する。 2.そのテーブルに、TransferTextを使用して、データを取り込む 3.追加クエリー(勿論重複部分を抽出しない様にしてね)を作成して、本当のインポート先に追加する。 4.追加クエリーのときに使用した抽出条件で、抽出クエリーを作成して、データ件数を求める。 5.重複を許しているテーブルのデータ件数を求める。 6.(4)の件数と(5)の件数を比較して、(4)の方が少なかったらエラーメッセージを表示する。 → ざぁっと作ってみましたが、処理時間は単純に倍程度になります。 手順案2 1.インポート元のテキストを全部なめて、キー重複がない様なテキストとして生成する。 2.そのファイルをインポートする。 3.テキスト生成時に、重複があった場合には、フラグを立てて、メッセージを表示する。 → テキスト処理部分を、C言語等々で書けばかなりの高速で処理出来る。Accessだけでやった場合には、やはり2倍程度の速度が必要。  こんな所ですかね(^^;

chicchi
質問者

お礼

昨日はバタバタしていてお礼も出来ずすみませんでした。 いろいろ教えていただきありがとうございました。 結局クエリで解決させてしまいましたが、いろいろ勉強になりました。 今後の参考にさせていただきます。

その他の回答 (2)

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.2

 その部分のソースと定義を提示して下さい。急いでいるのなら、それなりの情報提示を行って下さいね。  エラーメッセージが出なければ良いのか。  オリジナルメッセージを出したいのか。 処理に時間がかかっても良いのでしょうか?  方法はいくらでもあります。好きな物を選んで下さい。 1.インポートを全てオリジナルで作ってしまう。   そんなに時間はかかりません。データベースを2つ開いて、一件ずず読込んで登録していけば出来ますよね?  問題点:時間がやたらにかかる。 2.最初にインポート元のデータを抽出クエリーで抽出するその時に、キーをグループ化してだすだけで、重複分はでなくなる。それをインポートする。 3.面倒なので、インポート先で重複を許す仕様にする。

chicchi
質問者

補足

早速の回答ありがとうございます。 補足は以下でよろしいでしょうか? 定義を提示、とありますが、インポート定義を提示するべきということでしょうか? Transfer Textでインポートしてます。 取込パスを指定し、変数に代入し取り込みを実行します。指定した取込パスが間違っている場合があるので、エラー番号を指定してエラー処理を行っています。 1.オリジナルメッセージを出したいです。 2.処理に時間はかけたくありません。(取込数が多いので。) 3.重複を許可することはできません。(ユニークコードなので。) 現在、SetWarningでメッセージは表示しないようにしてあります。 やはりクエリを作成する方法しかないのでしょうか?

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

直接の解決策ではないんですが、テンポラリテーブルに、データをそのままの形で取り込み、クエリー等を使って加工すれば、その問題は回避できると思います。

関連するQ&A