- ベストアンサー
Access97のインポートエラー
アクセス97で、インポート定義を使いデータをインポートしています。 重複を許可していない項目が重複して取り込まれると、『すべてのデータをテーブルに追加できませんでした。』というメッセージが表示されます。 メッセージは表示されるものの、そのまま続行すると重複していないデータは問題なく取り込まれ、重複しているデータは上書きされません。 この動き自体は問題ないのですが、デフォルトメッセージを表示せず、重複しているデータは上書きされないというオリジナルメッセージを出したいのです。 しかし、どうしてもエラー処理に引っかかりません。 Debug.Printでエラー番号を調べたところ、8050でしたが、エラー番号を指定してエラー処理をしても飛ばされてしまいます。 ただし、On Error Gotoには反応するのです。 Error()関数でメッセージボックスにエラーメッセージを表示させようとしても、メッセージボックスは表示されるのですが、何の文章も表示されずOKボタンのみが表示されている状態です。 文章では分かり難いかもしれませんが、もしお分かりになる方がいらっしゃいましたら、ぜひぜひご回答をお願いいたします。 できれば本日中に・・・。ムリ言ってすみません!(本日中までの仕事なのです。)
- みんなの回答 (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倍程度の速度が必要。 こんな所ですかね(^^;
その他の回答 (2)
- mnabe
- ベストアンサー率33% (427/1283)
その部分のソースと定義を提示して下さい。急いでいるのなら、それなりの情報提示を行って下さいね。 エラーメッセージが出なければ良いのか。 オリジナルメッセージを出したいのか。 処理に時間がかかっても良いのでしょうか? 方法はいくらでもあります。好きな物を選んで下さい。 1.インポートを全てオリジナルで作ってしまう。 そんなに時間はかかりません。データベースを2つ開いて、一件ずず読込んで登録していけば出来ますよね? 問題点:時間がやたらにかかる。 2.最初にインポート元のデータを抽出クエリーで抽出するその時に、キーをグループ化してだすだけで、重複分はでなくなる。それをインポートする。 3.面倒なので、インポート先で重複を許す仕様にする。
補足
早速の回答ありがとうございます。 補足は以下でよろしいでしょうか? 定義を提示、とありますが、インポート定義を提示するべきということでしょうか? Transfer Textでインポートしてます。 取込パスを指定し、変数に代入し取り込みを実行します。指定した取込パスが間違っている場合があるので、エラー番号を指定してエラー処理を行っています。 1.オリジナルメッセージを出したいです。 2.処理に時間はかけたくありません。(取込数が多いので。) 3.重複を許可することはできません。(ユニークコードなので。) 現在、SetWarningでメッセージは表示しないようにしてあります。 やはりクエリを作成する方法しかないのでしょうか?
- ARC
- ベストアンサー率46% (643/1383)
直接の解決策ではないんですが、テンポラリテーブルに、データをそのままの形で取り込み、クエリー等を使って加工すれば、その問題は回避できると思います。
お礼
昨日はバタバタしていてお礼も出来ずすみませんでした。 いろいろ教えていただきありがとうございました。 結局クエリで解決させてしまいましたが、いろいろ勉強になりました。 今後の参考にさせていただきます。