5

私は VBA にほとんど慣れていません (学校でいくつかのコースを受講したことがありますが、それだけです)。ここで、Excel ファイルから Oracle データベース (リモート サーバーで実行されている) に接続する必要があります。私はぐるぐる回り、いくつかの例を見つけました。したがって、これまでに書いた次のコードがあります。

    Sub Try()
         Dim cn As New ADODB.Connection
         Dim rs As ADODB.Recordset
         Dim cmd As ADODB.Command
         Dim chunk() As Byte
         Dim fd As Integer
         Dim flen As Long
         Dim Main As ADODB.Parameter
         Dim object As ADODB.Parameter

     Stil = vbYesNo + vbCritical + vbDefaultButton1
        Titel = "db connection test"
    '   Meldung anzeigen.
        Antwort = MsgBox("trying to connect to db", Stil, Titel, Hilfe, Ktxt)

         ' Connect to the database using ODBC [msdaora][ORAOLEDB.Oracle]Provider=ORAOLEDB.Oracle;
         With cn
             .ConnectionString = "Provider=ORAOLEDB.Oracle;Password=pass;User ID=usr;Data Source=host:port:sid"
             .Open
             .CursorLocation = adUseClient
         End With

         ret = cn.Execute("create table newtesttable (main integer, object oid)")

         ' Here is an example if you want to issue a direct
    ' command to the database
         '
         'Set cmd = New ADODB.Command
         'With cmd
         '    .CommandText = "delete from MYTABLE"
         '    .ActiveConnection = cn
         '    .Execute
         'End With
         'Set cmd = Nothing

         '
         ' Here is an example of how insert directly into the
     ' database without using
         ' a recordset and the AddNew method
         '
         Set cmd = New ADODB.Command
         cmd.ActiveConnection = cn
         ' cmd.CommandText = "insert into newtesttable(main,object) values(?,?)"
         cmd.CommandText = "select * from test"
         cmd.CommandType = adCmdText

         ' The main parameter
        ' Set main = cmd.CreateParameter("main", adInteger, adParamInput)
         'main.Value = 100 '' a random integer value ''
         'cmd.Parameters.Append main

         ' Open the file for reading
         'fd = FreeFile
         'Open "myBlobFile.txt" For Binary Access Read As fd
         'flen = LOF(fd)
         'If flen = 0 Then
          '   Close
           '  MsgBox "Error while opening the file"
            ' End
         'End If

         ' The object parameter
         '
         ' The fourth parameter indicates the memory to allocate
     ' to store the object
       '  Set object = cmd.CreateParameter("object", _
       '                                       adLongVarBinary, _
       '                                       adParamInput, _
                                              flen + 100)
       '  ReDim chunk(1 To flen)
       '  Get fd, , chunk()

         ' Insert the object into the parameter object
       '  object.AppendChunk chunk()
       '  cmd.Parameters.Append object

         ' Now execute the command
         Set rs = cmd.Execute

     '   Mldg = "test"
        Stil = vbYesNo + vbCritical + vbDefaultButton1
        Titel = "asdasdasd"
    '   Meldung anzeigen.
        Antwort = MsgBox(rs, Stil, Titel, Hilfe, Ktxt)
         ' ... and close all
         cn.Close
         Close

 End Sub

このコードには多くの問題があると思いますが、現時点では .Open を実行しようとすると失敗します "Provider cannot be found. It may not be properly installed"。その後、ORAOLEDB.dll をダウンロードしてインストールする必要があることがわかりました。ORAOledb11.dll をインストールしてこれを行いました (32 ビットと 64 ビットの両方を試しましたが、私のマシンは 64 ビットです)。を実行してインストールしましたregsvr32 OraOLEDB11.dll

残念ながら、問題はそこまでです。では、この問題をトラブルシューティングする手順は何でしょうか? どうにかして、Oraoledb が自分のマシンに正しくインストールされていることを確認できますか?

どんなヒントでも大歓迎です。

4

2 に答える 2

4

32 ビット OS

Oracle の公式 Web サイトOracle10g Provider for OLE DB Version 10.1.0.4.0から oracle OLEDB プロバイダーをダウンロードすることで、これを Windows XP 仮想マシンで動作させることができました。古いOS用の現在の作業リンク OLEDB(32ビット)

ただし、JDK と JRE をより低いバージョンに置き換えることに注意してください (構成 xml ( products.xml ) をいじることで防ぐことができます。メンタルヘルスのポーションが足りなかったので、代わりにフル インストールを行いました)。その後、他のプログラムに影響を与える可能性があるため、環境変数の参照を削除する必要があります。インストール後、 OraOLEDBxx.dll をregsvc32に登録しました

私はExcel 2003でoracle db 11Gに接続していました。:)

接続文字列

拡張機能 (ActiveX データ オブジェクトとレコード ライブラリ) を有効にする必要がありました。接続を返す私の関数は次のとおりです。

Public Function connectToDb(provider As String, host As String, sid As String, user As String, pwd As String, db As String) As ADODB.Connection
Dim conn As ADODB.Connection
Dim dbConnectStr As String

    Set conn = New ADODB.Connection
    If provider = "Oracle" Then
        dbConnectStr = "Provider=OraOLEDB.Oracle;Data Source=" & host & ":1521/" & sid & ";User Id=" & user & ";Password=" & pwd & ";"
    Else

    End If
    conn.ConnectionString = dbConnectStr
    conn.Open
    Set connectToDb = conn
End Function

OS は 64 ビットですが、Office は 32 ビットです。

VM を 64 ビットのWindows 7Excel 2010に移行したとき。ODAC - Oracle Data Access Components -をダウンロードすることを確認してください。これは、32ビットの Excel がインストールされていて、それが 64 ビットであると考えていたため (Windows は 64 ビットであるため)、出産しようとしていたためです。これを64 ビットODAC バージョンで動作させるには。その後、 32 ビット バージョンをダウンロードしましたが、以前と同じように動作します。インストールについては、ダウンロードしたアーカイブ フォルダに含まれているインストール手順に従ってください。

Oracle Web サイトでの ODACの現在の作業リンク

于 2015-10-22T08:01:00.837 に答える