-PR-
解決済み

Access97のインポートエラー

  • すぐに回答を!
  • 質問No.10884
  • 閲覧数507
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 61% (63/102)

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

文章では分かり難いかもしれませんが、もしお分かりになる方がいらっしゃいましたら、ぜひぜひご回答をお願いいたします。
できれば本日中に・・・。ムリ言ってすみません!(本日中までの仕事なのです。)
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル13

ベストアンサー率 33% (427/1283)

んとね。

 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

お礼率 61% (63/102)

昨日はバタバタしていてお礼も出来ずすみませんでした。
いろいろ教えていただきありがとうございました。
結局クエリで解決させてしまいましたが、いろいろ勉強になりました。
今後の参考にさせていただきます。
投稿日時 - 0000-00-00 00:00:00
関連するQ&A
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 46% (643/1383)

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


  • 回答No.2
レベル13

ベストアンサー率 33% (427/1283)

 その部分のソースと定義を提示して下さい。急いでいるのなら、それなりの情報提示を行って下さいね。  エラーメッセージが出なければ良いのか。  オリジナルメッセージを出したいのか。 処理に時間がかかっても良いのでしょうか?  方法はいくらでもあります。好きな物を選んで下さい。 1.インポートを全てオリジナルで作ってしまう。   そんなに時間はかかりません。データベースを2つ開いて、一件ず ...続きを読む
 その部分のソースと定義を提示して下さい。急いでいるのなら、それなりの情報提示を行って下さいね。

 エラーメッセージが出なければ良いのか。
 オリジナルメッセージを出したいのか。
処理に時間がかかっても良いのでしょうか?

 方法はいくらでもあります。好きな物を選んで下さい。
1.インポートを全てオリジナルで作ってしまう。
  そんなに時間はかかりません。データベースを2つ開いて、一件ずず読込んで登録していけば出来ますよね?
 問題点:時間がやたらにかかる。

2.最初にインポート元のデータを抽出クエリーで抽出するその時に、キーをグループ化してだすだけで、重複分はでなくなる。それをインポートする。

3.面倒なので、インポート先で重複を許す仕様にする。
補足コメント
chicchi

お礼率 61% (63/102)

早速の回答ありがとうございます。
補足は以下でよろしいでしょうか?
定義を提示、とありますが、インポート定義を提示するべきということでしょうか?

Transfer Textでインポートしてます。
取込パスを指定し、変数に代入し取り込みを実行します。指定した取込パスが間違っている場合があるので、エラー番号を指定してエラー処理を行っています。

1.オリジナルメッセージを出したいです。
2.処理に時間はかけたくありません。(取込数が多いので。)
3.重複を許可することはできません。(ユニークコードなので。)

現在、SetWarningでメッセージは表示しないようにしてあります。

やはりクエリを作成する方法しかないのでしょうか?
投稿日時 - 2000-10-17 15:20:36
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ