連載
» 2005年09月09日 00時00分 公開

Excel‐Oracle連携(3):ExcelからOracleを更新できれば大助かり (1/4)

企業の部門内に蓄積された大量のExcelデータをデータベースで管理したい。あるいは、Excelで作成した業務書類からシステムに手作業でデータ入力する工数を削減したい。このようなニーズに応えるべく、OracleデータベースにはExcelからOracleへのさまざまな連携機能が備わっている。(編集部)

[宮本尚志,@IT]

はじめに

主な内容

--Page 1--

▼はじめに

▼マクロを使用する方法

▼更新処理における注意点

--Page 2--

 −Excelで変更行を判別する方法

 −更新操作における同時実行性の制御

--Page 3--

KeySQLを使用する方法

 −事前準備

 −KeySQLのGUIから更新

--Page 4--

KeySQLのマクロを使用する方法

KeySQLの誤操作対策

まとめ


 前回までの記事では、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文に変わるだけです。以下のミドルウェアごとのコードを見てみましょう。

  • ActiveX Data Objects(以下、ADO)からODBCドライバを使用する方法
  • ADOからOLE DBドライバを使用する方法
  • Oracle Objects for OLE(以下、oo4o)を使用する方法
Private Function updateSql(Row As String) As String
  Dim strSql As String    
  strSql = "update ""商品情報"" set "
  strSql = strSql & """価格"" = '" & Cells(Row, 10) & "'"
  strSql = strSql & "where ""商品ID""='" & Cells(Row, 2) & "'"
  oraconn.Execute (strSql)
End Function
リスト1 ADO+ODBC、ADO+OLE DBによるデータベースの更新

Private Function updateSql(Row As String) As String
  Dim strSql As String    
  strSql = "update ""商品情報"" set "
  strSql = strSql & """価格"" = '" & Cells(Row, 10) & "'"
  strSql = strSql & "where ""商品ID""='" & Cells(Row, 2) & "'"
  OraDB.ExecuteSQL (strSql)
End Function
リスト2 oo4oによるデータベースの更新

 上記リストのように、更新を行うUPDATE文の発行そのものは、SELECT文の発行とまったく同じ手順であり、簡単です。検索を行うマクロ同様、上記リストにデータベースへの接続部分を加えれば動作します。データベースへの接続を行うマクロに関しては、第2回を参照してください。

更新処理における注意点

 ただし、更新処理を行う場合、検索処理と違っていくつか注意すべきポイントがあります。まず、Excelシート上での変更行がどの行なのか判別する必要があります。Oracleデータベースの表全体に対して更新処理をすると、サーバ側にかかる負荷は高くなりますので、通常はExcelシート上のどの行が更新されたかをExcel側で判別して、その行のみを対象としてUPDATE文を発行します。当然ながら、それが更新(UPDATE)なのか、削除(DELETE)なのか、追加(INSERT)なのかも判別する必要があります。

 さらに、Oracleデータベースのデータを複数の人が変更する可能性がある場合、検索してから更新するまでの間に、ほかの人が同じデータを変更しているかもしれません。そういった場合にそれを無視して変更処理を行うのか、それとも確認ダイアログを表示させるのか、あるいは処理を失敗させるのか、といった制御についても考慮する必要があるでしょう。(次ページに続く)

       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。