お手軽が一番、ExcelをOracleクライアントに
http://www.atmarkit.co.jp/fdb/rensai/excel2oracle02/excel2oracle02_1.html
Excel連携で、Oracle環境を快適に。
Oracleを使う際は、自前でExcelでOracleに接続するマクロなんかを作ることが多いのでしょうね。
連携パターン メリット デメリット ADO+ODBC ・汎用的なADOのAPIを使用して開発できる ・Oracleデータベース固有のデータ型やパラメータなどが使用できない ADO+OLE DB ・汎用的なADOのAPIを使用して開発できる ・Oracleデータベース固有のデータ型やパラメータなどが使用できない
・oo4oよりはパフォーマンスが劣るoo4o ・追加的に必要なミドルウェアがないため、バージョン間での整合性などを意識する必要がない
・Oracleで実装されているすべての機能を利用可能
・PL/SQLを記述可能
・DAOに類似したインターフェイスを利用し、プロパティ、メソッドを用いることでプログラミングが容易
・oo4oのパラメータを変更することで、oo4o自体のチューニングが可能、高パフォーマンス・Oracle以外のRDBMSには接続できない
・コーディングに使用するメソッドなどはoo4o固有表2 VBAのマクロで使用するミドルウェアごとの違い
Oracleならば最も扱いやすいのがOracle Objects for OLE(oo4o)。
ここにあるのが完全なサンプルです。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9803/excel/
Private Sub Workbook_Open() Dim objSess As Object Dim objDb As Object Dim objDs As Object Dim objCol As Object Dim strError As String Dim ilngLoop As Long Dim strRange As String On Error GoTo errOpen: '1. ActiveXDLLであるoo4oを起動します。 Set objSess = CreateObject("OracleInProcServer.XOraSession") '2. SQL*Net接続文字列を指定して、Oracleと接続します。 Set objDb = objSess.OpenDatabase("PCDN", "scott/tiger", 0&) '3. SQL文を指定してレコードを取得します。 Set objDs = objDb.DbCreateDynaset("select * from emp", 12&) Set objCol = objDs.Fields For ilngLoop = 1 To objCol.Count Worksheets("データシート").Cells(1, ilngLoop).Value = objCol(ilngLoop - 1).Name Next '4. CopyToClipboardを使って、クリップボードに全レコードを転記します。 objDs.CopyToClipboard -1 '5. クリップボードからデータシートに転記します。 Sheets("データシート").Select Range("A2").Select ActiveSheet.Paste Sheets("UIシート").Select '6. レコードセットを開放します。 Set objDs = Nothing '7. Oracleとの接続を開放します。 Set objDb = Nothing '8. oo4oとの接続を開放します。 Set objSess = Nothing With Worksheets("UIシート") .Range("5:6").Copy For ilngLoop = 7 To 27 Step 2 strRange = CStr(ilngLoop) & ":" & CStr(ilngLoop + 1) .Range(strRange).Select ActiveSheet.Paste Next End With exitOpen: On Error Resume Next Set objDs = Nothing Set objDb = Nothing Set objSess = Nothing Exit Sub errOpen: MsgBox "WorkBook_Open:" & Error$, vbOKOnly & vbExclamation Resume exitOpen: End Sub
一番いいのは、oo4oはネイティブドライバなのでクリップボード制御が可能な点。クリップボードに収まるなら、コピー&ペーストの2ステップで極めて高速に取り出せる(結果セットをループで回してセルに展開しなくていい)ので、クライアント側に持ってきてからの性能はダントツ。