質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

3195閲覧

VBAからoracleへの接続方法

masahito11

総合スコア10

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/09/07 12:00

テーマ、知りたいこと

VBAからノートPCへダウンロードしたoracleへ接続方法

背景、状況

ネットでoracleへの接続方法を調べてコードを書いたがエラーが出て接続できない状況です。
エラー
「プロバイダが見つかりません、正しく接続されていない可能性があります」と表示される。
コードでいうと conn.Open この部分でエラーが発生しています。

##試したこと
oracleクライアントのインストール、Microsoft ActiveX Data Objects X.X Libraryの参照設定。
下記のサイトの内容を参考にしました。
https://skill-note.net/vba-oracle-connect/

VBA

1'TNS使用時 2 Provider = "OraOLEDB.Oracle" 'Provider 3 DATA_SOURCE = "XE" 'Data Source 4 USER_ID = "SYSTEM" 'userid 5 PASSWORD = "*********" 'password 6 7 'TNSサービス名を使用せず直接接続する場合 8 HOST_NAME = "LAPTOP-UA2JN1S2" 'データベースのホスト名orIPアドレス 9 PORT_NO = "1521" 'データベースのポート 10 SERVICE_NAME = "XE" 'サービス名 11 12 'Const DATA_SOURCE = "(DESCRIPTION=(ADDRESS=(PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = XE)))" 13 SQL = "Select * from t1" 14 Dim conn As New ADODB.Connection 15 16 'TNSサービス名を使用せず直接接続する場合 17 'cn.ConnectionString = "Provider=" & Provider & ";Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOST_NAME)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))" _ 18 ' & ";USER ID=" & USER_ID _ 19 ' & ";PASSWORD=" & Password 20 21 22 'TNS使用時 23 conn.ConnectionString = _ 24 "Provider=" & Provider & ";" & _ 25 "Data Source=" & DATA_SOURCE & ";" & _ 26 "USER ID=" & USER_ID & ";" & _ 27 "Password=" & PASSWORD & ";" 28 29 conn.Open 30 31 Dim rs As New ADODB.Recordset 32 33 rs.Source = SQL 34 rs.ActiveConnection = conn 35 rs.Open 36 37 With Worksheets("Sheet1") 38 Stop 39 .Cells.Clear 40 41 '列名の表示 42 For i = 0 To rs.Fields.Count - 1 43 .Cells(1, i + 1) = rs(i).Name 44 Next i 45 46 '値の表示 47 row = 1 48 Do Until rs.EOF 49 For i = 0 To rs.Fields.Count - 1 50 .Cells(row + 1, i + 1) = rs(i).Value 51 Next i 52 rs.MoveNext 53 row = row + 1 54 Loop 55 End With 56 57 rs.Close 58 conn.Close 59 Set rs = Nothing 60 Set conn = Nothing 61End Sub 62 63

よろしければご教授おねがいいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOZ6.0

2023/09/07 13:08

・OS は? ・Oracle クライアントのバージョンは?また、32bit/64bit のどちらですか? ・Office のバージョンは?また、32bit/64bit のどちらですか? 質問を編集して記入してください。
guest

回答2

0

Office と Oracle のビット数違いは確定したようですね。
32ビットの Oracle クライアントをインストールしたら、コマンドプロンプトを開き、

where oci.dll

と入力してください。
2箇所ヒットすると思いますが、64ビットのものが先になっているようなら、システム環境変数の PATH を修正し、Office が 64 ビットの dll を見つけてしまわないよう 32ビットのものが先に来るようにしてください。

あと、udl ファイルを使った接続確認方法を紹介しておきます。

64ビットの場合

(1) エクスプローラーで右クリックしてテキスト文書を作成し、拡張子を udl に変更します。
(2) udl ファイルをダブルクリックすると画面が立ち上がります。
(3) プロバイダータグを選択すると、使用できるプロバイダーの一覧が表示されます。
(4) 「Oracle Provider for OLE DB」を選択して「次へ」ボタンを押します。
(5) データソース、ユーザ名、パスワードを入力し、「パスワードを保存する」チェックボックスにチェックしてください。
(6) 接続のテスト(T) を押すと、接続確認が出来ます。
(7) 接続確認が出来たら、OKボタンを押します。
(8) パスワードうんぬんのメッセージボックスが出るので、「はい」を選択

udl ファイルをメモ帳で開くと、ADO の接続文字列が記録されています。

こうして出来た UDL ファイルを使って接続することも出来ます。

vba

1udlFilePath = "udlファイル名" 2Set conn = CreateObject("ADODB.Connection") 3conn.Open "File Name=" & udlFilePath 4MsgBox "OK"

32ビットの場合

C:\Windows\syswow64\rundll32.exe "C:\Program Files (x86)\Common Files\System\Ole DB\oledb32.dll",OpenDSLFile "udl ファイルのフルパス"

で画面が起動します。操作方法は 64ビットと同様です。

投稿2023/09/07 15:20

編集2023/09/07 19:37
KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、利用されている Excel が 32bit / 64bit 版のどちらなのか確認ください。

プロバイダが見つかりません

ここでいう、プロバイダは OraOLEDB.Oracle のことです。
DB 接続以前に、DB 接続の為のドライバ(プロバイダ)が見つからない、という状況です。

おそらく、
・Excel が 32bit 版で、Oracle Client が 64bit 、
・Excel が 64bit 版で、Oracle Client が 32bit
のいずれかの組み合わせで実行されているのが原因ではないかと思います。

<参考情報>
■ Excel VBA でOracle DB接続 「プロバイダーが見つかりません。…」の対処方法
https://yuworks.blog/excel-vba-oracle-db/

投稿2023/09/07 13:19

cx20

総合スコア4633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masahito11

2023/09/07 13:57

ご返信ありがとうございます。 Excelが32ビット版でした。添付していただいたサイトにて確認しましたが、64ビット版のインストールしか記載されておらず、自身で32ビット版を探しましたがどこにあるのか探しきれませんでした。もし可能であれば32ビット版のインストーラーがどこにあるか教えていただけると幸いです。 明日自力でなんとかするために、oracleのサイト内でチャットにて問合せしてみることも考えています。 以上ご確認お願いいたします。
cx20

2023/09/07 22:41 編集

最新版だとこちらから落とせるようですね。 ページ下の「ODAC Xcopyパッケージ」の箇所に「64ビット」版と「32ビット」版のリンクがありました。 ■ Download ODP.NET、Oracle Developer Tools for Visual Studio (Code)、およびODACのダウンロード https://www.oracle.com/jp/database/technologies/net-downloads.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問