I am almost not familiar with VBA (have had some courses back at school and that\'s it). Now I need to connect to Oracle database (which is running on remote server) from Ex
You can insure that your connection string is accurate by creating a text file with the ending .udl then close and open the file. You'll be prompted with a user interface to connect to the server. Enter your info and test the connection. Then if your connection is working close the file. Open that file in text format and copy the connection string into your code. Also be sure that your reference library is selected for ADO. This line looks wrong:
Data Source=host:port:sid
Below is a sample I use to pull in the sql from text and extract results to text.
Public Function ObjectConnect(AID As String, APswd As String)
ObjectConnect = "Provider=ORAOLEDB;Password=" & APswd & ";Persist Security Info=True;User ID=" & AID & ";Data Source=(nameofserverConn)"
End Function
Sub RunSQL()
Dim strConn As String
Dim Query As String
Dim txt As Object
Dim ns As ADODB.Connection
Dim rs As ADODB.Recordset
Dim txtfile As Object
Dim f As ADODB.Field
Dim myFileSystemObject As Object
Dim txtN As String
Dim DL As String
FName1 = ""
Query = ""
txtStrngX = ""
Set ns = New ADODB.Connection
Set rs = New ADODB.Recordset
ns.ConnectionTimeout = 99000
ns.CommandTimeout = 99000
ns.Open ObjectConnect('UserID', 'Password') 'this is a public function w. userform for people to enter ID and Password.
With rs
.ActiveConnection = ns
'however you're writing the sql it would go here.
.Open Query
End With
If rs.State <> 0 Then
DL = Sheet1.Cells(2, 2)
RecordsetToText rs:=rs, FullPath:=txtN, ValueDelimiter:=DL 'this is a sub function that writes to a text file. Didn't include the code but left this. Here you would want to do something with the recordset.
End If
On Error Resume Next
rs.Close
Set rs = Nothing
End Sub
32-bit OS
I managed to get this working on Windows XP virtual machine by downloading oracle OLEDB provider from Oracle official website Oracle10g Provider for OLE DB Version 10.1.0.4.0. Current working link OLEDB for older OS (32 - bit)
But be aware it will replace JDK and JRE to lower version (It can be prevented by playing with the configuration xml - products.xml - I did not have enough of mental health potion, so I did full install instead). Afterwards you need to delete reference in environment variables as it may effect other programs. After installation, I registered OraOLEDBxx.dll with regsvc32
I was connecting to oracle db 11G with excel 2003. :)
Connection string
I had to enable extensions (ActiveX Data Object and record libraries). My function returning connection was:
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
64-bit OS but 32-bit Office
When our VMs migrated to 64-bit Windows 7 with Excel 2010. Make sure you will download ODAC - Oracle Data Access Components - for right -bit version of your excel installation because I had 32-bit excel installed and thought it was 64-bit (as windows is 64-bit) so I was giving birth trying to get this working with 64-bit ODAC version. Afterwards I did download 32-bit version and it works just as before. For installation just follow install instructions included in downloaded archive folder.
Current working links for ODAC on Oracle website