ADODB接続を使用してOracleデータベースに接続するExcelスプレッドシートがいくつかあります(以下のサンプルコードを参照)。接続は、oracleinstaclientドライバーを使用してクライアントマシンにセットアップされたTNSNAMESを使用して行われます。
Set oCN = CreateObject("ADODB.Connection")
oCN.CursorLocation = 3
oCN.CommandTimeout = 0
cCN11 = "DRIVER=Oracle in instantclient11_1;"
strDatabase = "DBQ=DATABASE_NAME;"
strID = "UID=YourID;"
strPassword = "PWD=YourPassword;"
oCN.Open cCN11 & strDatabase & strID & strPassword
このコードは正常に機能します。ただし、TNSNAMES.ORAの保守から離れて、代わりにLDAPを使用することが決定されました。LDAPを使用してVBA経由で接続する方法についていくつかの情報を見つけようとしましたが、役立つ情報を見つけることができませんでした。
ADODB接続でLDAP接続文字列が許可されているかどうか、または他のものを完全に使用する必要があるかどうかはわかりません。誰かが私を正しい方向に向けることができれば、それはありがたいです。
編集
私のセットアップの背景を説明するためだけに。32 Oracleクライアントがネットワークドライブ(z:\ oracle11)にインストールされています。これを使用するクライアントマシンのレジストリには、次のドライバ情報があります。
InstantClient11_1のHKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ ODBC \ ODBCINST.INI \ Oracle
「HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ ORACLE」には、インストールされているOracleクライアント(z:\ oracle11)を指すように設定されたORACLE_HOMEとTNS_ADMINがあります。TNSNAMES.ORAは、インストールフォルダー(z:\ oracle11)のルートにあります。
この設定は何年にもわたって実施されており、TNSNAMES経由で接続する場合は正常に機能します。
接続文字列サイトによると、TNSLESS接続を実行する場合、接続文字列の形式は次のようになります。
SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));
uid = myUsername; pwd = myPassword;
コメントと回答、およびいくつかのさらなる調査に基づいて、以下のコードを使用して接続文字列を設定すると機能するはずです。接続文字列にドライバーを含める必要があります
現在のTNSNAMES.ORAデータを使用して接続文字列を作成しました(セキュリティ上の理由から、HOST、PORT、SERVICE_NAME、UID、およびPWDは編集されています)
Dim sSQL As String
Dim oRS As ADODB.Recordset 'ADODB.Recordset
Dim oCN As ADODB.Connection
Set oCN = CreateObject("ADODB.Connection")
oCN.CursorLocation = 3
oCN.CommandTimeout = 0
' Build the connection string
strConnectionString = "DRIVER=Oracle in instantclient11_1;DBQ=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=my_ host)(PORT=1234)))(CONNECT_DATA=(SERVICE_NAME=myhost.world)(SERVER=DEDICATED)));Pwd=my_password;Uid=my_user_id"
' Open the connection using the connection string
oCN.Open strConnectionString
残念ながら、「DBQ」がTNSNAMESファイルに存在しなかった場合に表示されるエラーメッセージが表示されます。
[Oracle][ODBC][Ora][ORA-12154: TNS:could not resolve the connect identifier specified.
(接続文字列の例のように)DBQをSERVERに変更すると、別のエラーメッセージが表示されます。
[Oracle][ODBC][Ora][ORA-12560: TNS:protocol adapter error.
「my_host」値に対してNSLOOKUPを実行しましたが、解決されるので、それが正しいことがわかります。ポート番号は正しいです。サービス名も正しいので、ユーザー名とパスワードも正しいです。
また、「Microsoft ActiveX Data Objects2.8」ライブラリと6.1バージョンを使用してみましたが、どちらも違いはありません。
回答
Wernfried Domscheitの回答を明確にするには、「DBQ = DATABASE_NAME」を変更するだけで、DATABASE_NAME値がDNS値になります。Wernfriedに感謝します。
私は明らかにこれを考えすぎていました。私はそれを最初に試したに違いないと確信していますが、明らかにそうではありません。よくできました。もう一度試して、答えを読みました...もう一度。
DATABASE_NAME
データベースの単なるエイリアスです。このようなエイリアスがtnsnames.ora
ファイルによって解決されるか、LDAPサーバーによって解決されるかは関係ありません。
したがって、違いはありません。ファイルのTNS_ADMIN
場合と同じように変数を設定するだけtnsnames.ora
です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加