Excelから、ACCESSへ転送したときにエラーが発生した場合は、どうしますか?
ACCESSという枠組みではなく、データベースという発想でいくならは、
エラーが発生した場合は、転送内容を全部中止にするしかありません。
目次
ACCESSへ転送時に、エラーが発生したら?
こんにちは。伊川(@naonaoke)です。
いまや、Excelから、ACCESSの転送は、私の中では、定番になりました。
しかし、気を付けても、エラーは発生します。
主キーの重複や、文字型なのに、数値型を転送したとか、もろもろ・・・・・・
このような場合、どのようにリカバリーするのかという問題です。
データベースは、常に、清く、正しく、美しくありたいものです。
人的な以下バリーは限界があります。
1番いいのは、エラーが発生したら、その時点で、転送を中止することが望ましいです。
このブログはこんな人にお勧め
- ExcelからACCESSの転送機能を利用して、業務をしている人
- ExcelからACCESSへの転送時のエラーに悩んでいる人
- これから、ExcelからACCESSへ転送設定を利用しようとしている人
このブログを、読み終わるころには・・・・
転送前のデータを整形することで、無駄なリカバリーの手間を省くことができます。
トランザクション処理
カンタンに言うと、一連の作業を一度に処理することです。
トランザクション処理には、よく、お金の話が利用されます。Aさんの口座から、Bさんの口座へ、50万円を送金します。
Aさんの送金は完了して、残金が50万円減りますが、Bさんへの入金が失敗した場合は、Bさんの口座の残金は増えません。
Aさんの残金は減り、Bさんの残金は増えないという矛盾を発生させないために、
Bさんの残金が増えなければ、Aさんの残金も減らないという処理をします。
これが、トランザクション処理です。
1連の処理が完了しなければ、Aさんのやりかけの振込を取消す⇒ロールバック(処理をもとに戻す)
1連の処理が完了したら、Aさんの振込を確定させ、Bさんの残金を増やす⇒コミット(処理結果を確定)
この流れをACCESSに設定します。
トランザクション処理 作業手順 その1 今までの転送コード
このデータを転送するには、下記のコードが必要です。
例えば、このコードを利用して、再度転送をするとエラーが発生します。
当然と言えば当然です。
主キーは重複することができません。
トランザクション処理 作業手順 その2 トランザクション処理を利用したコード
このようなコードを記載します。
転送しようとしても、主キーが重複するため、すべての登録ができないようになっています。
なにかのエラーがあれば、トランザクション処理を中止する仕掛けなのです。
トランザクション処理 作業手順 その3 ここが便利
上のデータですが、A0002とA0001の2件が、ACCESSには反映されていません。
この場合、A0002とA0001の2件が登録された時点で、エラーが発生します。
上記の場合は、肉眼で確認できる範囲ですが、もっと新規レコードがたくさんあった場合は、肉眼で確認するのが大変です。
もっとも、主キーなので、登録させないのは、いいのですが、明らかなエラーをエンドユーザーは嫌がいります。
だから、トランザクションの処理をしこんだほうが、エンドユーザーにも、やさしいデータベースになるのです。
データベースは、清く、正しく、美しくです。
ここがポイント
入力規制は、絶対に必要です。 競馬で、データベースを作成していると、どうしても、流れ作業になり、そのまま転送ボタンを押すことがあります。トランザクション処理をしておけば、流れ作業でも、エラーで中断となり、データベースは、転送前の状態に保持されます。
ここが便利ですね。
まとめ
初めて、ACCESSとExcelの転送をする際、初めて見たときは、手品のようでした。
しかし、その手品を、もっとよりよく見せるために、細工をしました。
DAOで主キーの重複カウントで、登録させないというコードを記載するよりも、
もっとカンタンにトランザクション処理を中断するほうが便利ですね。
今回も最後まで読んでいただき、ありがとうございました。
今回のサンプルファイルは、No252です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。