先把代码放上来
Private Sub run_sql(sqlstr As String, sheetsname As String)
Application.ScreenUpdating = False
Dim OraSession As Object
Dim OraDatabase As Object
Dim OraDynaset As Object
Dim field_name As String
Dim ORADB_DEFAULT, ORADYN_READONLY
Dim Result
Dim strSQL, i
' Dim ds As String, user_password As String
i = 0
On Error GoTo Err_Rtn
'ds = Cells(1, 8).Value
'user_password = Cells(2, 8).Value
Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'oo4oObject
' Set OraDatabase = OraSession.OpenDatabase(ds, "lteopti/123456", ORADB_DEFAULT) '连接DB
Set OraDatabase = OraSession.OpenDatabase(ds, user_password, ORADB_DEFAULT) '连接DB
Set OraDynaset = OraDatabase.CreateDynaset(sqlstr, ORADYN_READONLY) '执行SQL
Sheets(sheetsname).Range("a1").CurrentRegion.ClearContents
For i = 0 To OraDynaset.Fields.Count - 1 '循环所有的数据
ActiveWorkbook.Sheets(sheetsname).Cells(1, i + 1) = OraDynaset.Fields(i).Name
Next
ActiveWorkbook.Sheets(sheetsname).Select
OraDynaset.CopyToClipboard
ActiveWorkbook.Sheets(sheetsname).Range("a2").Select
ActiveWorkbook.Sheets(sheetsname).Paste
Application.CutCopyMode = False
Set OraDynaset = Nothing '释放资源
Set OraDatabase = Nothing '释放资源
Set OraSession = Nothing '释放资源
Exit Sub
Err_Rtn:
If (OraSession.LastServerErr <> 0) Then 'OraSession Error
MsgBox OraSession.LastServerErrText '表示Error内容
OraSession.LastServerErrReset '清空Error
Set OraSession = Nothing '释放资源
ElseIf (OraDatabase.LastServerErr <> 0) Then 'OraDatabase Error
MsgBox OraDatabase.LastServerErrText '表示Error内容
OraDatabase.LastServerErrReset '清空Error
Set OraDatabase = Nothing '释放资源
Set OraSession = Nothing '释放资源
Else
MsgBox Err.Description '表示Error内容
Set OraDynaset = Nothing '释放资源
Set OraDatabase = Nothing '释放资源
Set OraSession = Nothing '释放资源
End If
End Sub