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

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

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

Q&A

解決済

5回答

28471閲覧

VBAでOracle接続において、ドライバーが見つかりませんというエラーを解決したい

dispatch_worker

総合スコア4

VBA

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

0グッド

0クリップ

投稿2020/06/05 02:30

編集2020/06/07 04:35

前提・実現したいこと

社内ツールのOfficeのヴァージョンアップ対応をしています。
Offcie2007のツールを以下の環境で稼働確認を行っています。

・windows10 64bit
・office365 64bit
・oracle client12c 64bit
・ODBCデータソース 64bit
ドライバータブにOracle in OraClient12Home1の設定有

社内ツールを以下の要件を満たしてOracleに接続したいです。
<要件>
・ドライバー接続
・ユーザーDSN、システムDSNの設定追加をしない
(⇒tnsnames.ora ファイルのネットサービス名を指定する方法を希望)

発生している問題・エラーメッセージ

oraCon.Openのところで以下のエラーメッセージが出力されます。

データソース名および指定された既定のドライバーが見つかりません。 エラーNo -2147467259

該当のソースコード

VBA

1'コードは、自宅から手動で入力しているため、誤りがある可能性がございます。 2Const DRIVER = "{Oracle in OraClient12Home1}" 3Const NETSERVICENAME = "test" 4Const USERNAME = "test01" 5Const PASSWORD = "password" 6 7Dim oraCon As ADODB.Connection 8Set oraCon = New ADODB.Connection 9 10oraCon.Open("DRIVER=" & DRIVER & ";CONNECTSTRING=" & NETSERVICENAME & ";UID=" & USERNAME & ";PWD=" & PASSWORD & ";")

試したこと

ドライバ名が間違っているのかと思い、
Const DRIVER = {Oracle 12c ODBC driver}に変更したが結果は変わらなかった。

補足情報(FW/ツールのバージョンなど)

・windows10 64bit
・office365 64bit
・oracle client12c 64bit
・ODBCデータソース 64bit
ドライバータブにOracle in OraClient12Home1の設定有

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

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

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

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

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

guest

回答5

0

自己解決

接続文字列が誤っていました。
CONNECTSTRINGをDBQに修正して、
DBに接続できました。

投稿2020/06/09 13:31

dispatch_worker

総合スコア4

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

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

0

>ODBCデータソースで接続確認は行いました。
繋がっているのであれば登録したDNS名を指定すると繋がると思います。
(例:OBDC64登録名称test_ora/Oracleサービスネーミングtest)

VBA

1Sub Test_Sample_Miniature() 2 Dim oraCon As ADODB.Connection 3 Dim oraRs As ADODB.Recordset 4 Dim constr As String 5 Dim strSQL As String 6 7 '(ODBC64) 8 constr = "DSN=test_ora;UID=user;PWD=password" 9 '又は(MS ODBC) 10 'constr = "Provider=MSDASQL;DSN=test_ora;UID=user;PWD=password;" 11 '又は(OLE DB) 12 'constr = "Provider=OraOLEDB.Oracle;Data Source=test;User ID=user;Password=password;" 13 '又は(Oracle ODBC Driver) 14 'constr = "DRIVER={Oracle in OraClient12Home1};UID=user;PWD=password;DBQ=test;DBA=W;" 15 16 Set oraCon = New ADODB.Connection 17 oraCon.ConnectionString = constr 18 oraCon.Open 19 20 strSQL = "select * from testOraDB.TestTable" 21 Set oraRs = New ADODB.Recordset 22 oraRs.Open strSQL, oraCon 23 'レコード 24 Dim row As Long 25 Do Until oraRs.EOF 26 row = row + 1: oraRs.MoveNext 27 Loop 28 29 oraRs.Close 30 oraCon.Close 31 Set oraCon = Nothing 32 33End Sub

イメージ説明
但し、Oracle12cClientが正常にインストール済みか確認必要ですので、
Excel2019(64ビット版)からOBDC経由で接続を行った方が良いです。
(データ→データ取得→その他のデータソースから→ODBC)
これでデータ取得できない場合には、環境設定の確認が必要と思われます。
https://docs.oracle.com/cd/E96517_01/adfns/odbc-driver.html#GUID-F141C2E1-BA44-4399-B72A-3B1FBA2BC750

投稿2020/06/07 04:08

編集2020/06/10 00:10
tosi

総合スコア553

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

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

dispatch_worker

2020/06/07 04:55

ご丁寧にハードコピーまでつけて頂きありがとうございます。 大変わかりやすいです。 システムDSN(またはユーザーDSN)に追加するときに ユーザーIDとパスワードを指定しないといけないと思いますが、 ツールの仕様でユーザーIDとパスワードを 外部ファイルから読み込む方式となっております。 そういう状況なので、ユーザーDSNには、 こちらで把握しているIDとパスワードを入力し、 正常に接続できることは確認したものの DSNには追加していない状態です。 端末数が多く、IDとパスワードが固定でないので、 できればDSNに設定を追加しない方法を希望していました。 ※DSNに追加する方法しかないのであれば、  基盤にお願いしなければなりませんが、  絶対に必要だとわからないとお願いできない状況です。 tosi様のアドバイスで、 こちらのOracle接続の要件に不足があったので 前提・実現したいこと にOracle接続の要件を追加致しました。 引き続き、どなたかアドバイスを頂けると幸いです。
tosi

2020/06/10 00:19 編集

ソースに下記も記載しています。 '又は(MS-ODBC) '又は(OLE DB) 先づは、VBAからDSNで接続成功させることが大切と思います。 成功すれば、あとは直接Driverへ変える記述方法を探すという手順に移れますので、具体的な問い合わせが可能になると思われます。
guest

0

odbcデータソースで接続できるのであればファイルdsn?かなにかで接続文字列を吐き出せたと思います。
ですがまずdsnでadodb接続ができるか試されてはいかが?

投稿2020/06/07 03:02

sousuke

総合スコア3830

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

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

dispatch_worker

2020/06/07 04:17

ご回答頂きありがとうございます。 接続文字列を吐き出せることを知りませんでした。 調べてみようと思います。 dsnでadodb接続について、調べて接続できるか確認してみます。 アドバイス頂きありがとうございます。
guest

0

なんとなくOpenの引数が違うような。
Openの第一引数自体が接続文字列なので、"CONNECTSTRING="が含まれるのはおかしくないですかね。
"Data Source"が正しいような気がします。
その他のプロパティも要確認。
こちらのサイトなどを参考にしてみてください。

投稿2020/06/05 02:54

ttyp03

総合スコア17000

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

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

dispatch_worker

2020/06/05 03:22

ご回答頂きありがとうございます。 ご提示いただいたページは、プロバイダ接続のようです。 丁度、ご提示いただいたサイトにドライバ接続もあって、 職場のOPENの引数は、そちらを参考にして記入した次第です。 windows10では、プロバイダ接続が未対応のようで、 さらにoo4oもOracleClient12のため、使用できず、 結果的にドライバ接続しか方法がないと思っていますが、 質問のとおり、ドライバが見つからないと言われ困っている次第です。
guest

0

ODBCデータソース上で表示されるドライバー名で確認してみてください

投稿2020/06/05 02:47

sazi

総合スコア25327

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

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

dispatch_worker

2020/06/05 03:10

ご回答頂きありがとうございます。 ODBCデータソース上で表示されるドライバー名とは、 ODBCデータソースアドミニストレターの ドライバータブに表示されている名前欄がドライバー名ということで よろしいのでしょうか?
sazi

2020/06/05 03:20 編集

はい。その認識です。
dispatch_worker

2020/06/05 03:28

ご返信ありがとうございます。 ドライバー名の指定は、間違っていないようです。
sazi

2020/06/05 03:35 編集

oracle clientの使用前提なのですよね?
dispatch_worker

2020/06/05 03:42

はい。oracle clientの使用前提です。
sazi

2020/06/05 03:49 編集

ODBCデータソースで接続確認は行われてますか? 利用するしないに関わらず試してみた方が良いかと思います。
sazi

2020/06/05 03:56 編集

ドライバーの場所の設定はどのように行われていますか? 指定が無ければ、tnsnames.oraのある場所(ORACLE_HOME/network/admin)を参照に行くはずですが。 ※たまにしか行わないので、記憶が曖昧ですのでご容赦願います。
dispatch_worker

2020/06/05 05:21

ご回答頂きありがとうございます。 ODBCデータソースで接続確認は行いました。 正常に接続できたことを確認しています。 ドライバーの場所の設定が不明です。 基盤担当は他の方が行っています。 そもそもドライバーの場所を設定しなければならないこと知りませんでした。 ドライバーの場所の設定をどのように確認するのかは調べてみようと思います。 ありがとうございます。 /network/adminにtnsnames.oraは、存在し、 接続したいNETSERVICENAMEの記載はあることを確認しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問