企業の部門内に蓄積された大量のExcelデータをデータベースで管理したい。あるいは、Excelで作成した業務書類からシステムに手作業でデータ入力する工数を削減したい。このようなニーズに応えるべく、OracleデータベースにはExcelからOracleへのさまざまな連携機能が備わっている。(編集部)
前回までの記事では、ExcelのデータをOracleデータベースに格納する方法と、OracleデータベースのデータをExcelから検索する方法について紹介してきました。最終回となる今回は、ExcelからOracleデータベースのデータを更新する方法について解説します。
OracleデータベースのデータをExcelで更新する主な方法は、VBAマクロを使用する方法と、KeySQLを使用する方法の2つです。本記事では、それぞれについて具体的な方法を紹介します。
XMLを利用して簡単に更新する方法もありますが、この方法ではXMLを利用して格納したデータしか変更できません。Oracleデータベース内の通常の表を更新する用途では使えないため、今回の記事では触れません。XMLを利用したデータ格納に関しては「ExcelデータをOracleに格納する手法」を参照してください。ほかにもODP.NETを利用した方法など、さまざまな方法がありますが、本記事では触れません。
VBAマクロでOracleデータベースのデータを更新する方法は、第2回「お手軽が一番、ExcelをOracleクライアントに」で紹介した検索の場合と同様で、SELECT文がUPDATE文に変わるだけです。以下のミドルウェアごとのコードを見てみましょう。
Private Function updateSql(Row As String) As String |
リスト1 ADO+ODBC、ADO+OLE DBによるデータベースの更新 |
Private Function updateSql(Row As String) As String |
リスト2 oo4oによるデータベースの更新 |
上記リストのように、更新を行うUPDATE文の発行そのものは、SELECT文の発行とまったく同じ手順であり、簡単です。検索を行うマクロ同様、上記リストにデータベースへの接続部分を加えれば動作します。データベースへの接続を行うマクロに関しては、第2回を参照してください。
ただし、更新処理を行う場合、検索処理と違っていくつか注意すべきポイントがあります。まず、Excelシート上での変更行がどの行なのか判別する必要があります。Oracleデータベースの表全体に対して更新処理をすると、サーバ側にかかる負荷は高くなりますので、通常はExcelシート上のどの行が更新されたかをExcel側で判別して、その行のみを対象としてUPDATE文を発行します。当然ながら、それが更新(UPDATE)なのか、削除(DELETE)なのか、追加(INSERT)なのかも判別する必要があります。
さらに、Oracleデータベースのデータを複数の人が変更する可能性がある場合、検索してから更新するまでの間に、ほかの人が同じデータを変更しているかもしれません。そういった場合にそれを無視して変更処理を行うのか、それとも確認ダイアログを表示させるのか、あるいは処理を失敗させるのか、といった制御についても考慮する必要があるでしょう。(次ページに続く)
Copyright © ITmedia, Inc. All Rights Reserved.