Excel访问Oracle

MS Excel可以通过OO4O (oracle objects for OLE) 来访问Oracle.

如果出现找不到对象,或者无法创建对象之类的错误,请先安装OO4O,Oracle网站上可以找到,Oracle8的Client是默认安装的。但是Oracle9没有,所以需要自行下载安装。范例如下:

========================

Sheet1 为查询条件页
Sheet2为结果页

Sheet1中查询条件的第一行表头必须与数据库的字段名称一样,下面同列可以放多个条件模糊查询
如果要新增查询条件,只需要在sheet1第一行增加表头,在表头下面跟随查询条件即可,查询条件可以为空,但是不可以跳行

Sheet2中显示查询,目前是自动显示所有字段,如果不需要则要去代码中修改,将select * from 改成 select 字段1,字段2…from 即可

进入宏(macro)编辑模式 , 修改数据库连接(Tnsnames.ora中配置的名称)以及用户名密码

========================

 

  1. Sub Query()
  2. 'Original Coder:Ben Chan(go2cpp#gmail.com)
  3. 'Create Date 2008/12/23
  4. 'if you made a big change, please log it, I would like to receive your changes or suggestions.
  5. Sheet2.Activate
  6. Cells.Select
  7. Cells.ClearContents
  8. Call ConnectDB
  9. End Sub
  10. Sub ConnectDB()
  11. Dim objOraSession, objOraDb
  12. Dim strDbUser, strDbPwd, strDbConn
  13.  On Error Resume Next
  14.  strDbUser = "userid"       'UserId
  15.  strDbPwd = "password"        'PSW
  16.  strDbConn = "hrms"            'Connection
  17.  Set objOraSession = CreateObject("OracleInProcServer.XOraSession")
  18.  Set objOraDb = objOraSession.OpenDatabase(strDbConn, strDbUser & "/" & strDbPwd, 0)
  19.  If Err.Number > 0 Then
  20.  MsgBox (Err.HelpContext & Err.Description & Err.HelpFile & Err.LastDllError & Err.Number & Err.Source)
  21.  End If
  22.  Dim strSql
  23.  strSql = getSql()
  24.  Set objRs = objOraDb.DbCreateDynaset(strSql, 0)
  25.   'if no data found then exit
  26.  If objRs.RecordCount = 0 Then
  27.   MsgBox ("No data found!" & Err.Description)
  28.   GoTo LabelEnd
  29.  End If
  30.  'display the query result
  31.   Sheet2.Activate
  32.   
  33.  If objRs.RecordCount > 0 Then
  34.                   objRs.MoveFirst
  35.                   MsgBox objRs("name")
  36.                   For x = 0 To objRs.Fields.Count - 1
  37.                           Sheet2.Cells(1, x + 1) = objRs.Fields(x).Name
  38.                           Sheet2.Cells(1, x + 1).Format = Bold
  39.                   Next
  40.     
  41.                   For y = 0 To objRs.RecordCount - 1
  42.                           For x = 0 To objRs.Fields.Count - 1
  43.                                   Sheet2.Cells(y + 2, x + 1) = objRs.Fields(x).Value
  44.                           Next
  45.                           objRs.MoveNext
  46.                   Next
  47. End If
  48. LabelEnd:
  49. Set objOraDb = Nothing
  50. Set objOraSession = Nothing
  51. End Sub
  52. Function getSql() As String
  53.  Dim strSql, strTemp As String
  54.  Dim nCol, nRow As Integer
  55.  nCol = 0   'the number of query condition, and should start from top left of the sheet1
  56.  While (Sheet1.Cells(1, nCol + 1).Value <> "")
  57.  nCol = nCol + 1
  58.  Wend
  59.  If nCol = 0 Then
  60.  getSql = ""
  61.  Exit Function
  62.  End If
  63.  'strSql = "select EMPLID,NAME,NAME_A,PLANT_ID_A,EMAIL_ADDRESS_A,DEPTID,DEPT_DESCR_A,UPPER_DEPTID_A,ORIG_HIRE_DT,ADULT_INDI_A,COMPANY,BATCH_NUMBER_A,PHONE_A,EMPL_CATEGORY_A,SUPERVISOR_ID,OFFICER_LEVEL_A,KTP#_IDN from PS_SUB_WZS_AT_VW_A where 1=1 "
  64.  strSql = "select * from PS_SUB_WZS_AT_VW_A where 1=1 "
  65.  strTemp = ""
  66.  For i = 1 To nCol  'collumn
  67.     nRow = 2
  68.     strTemp = ""
  69.     Do
  70.     If (Sheet1.Cells(nRow, i).Value <> "" And nRow = 2) Then
  71.        strTemp = " and (" & Sheet1.Cells(1, i).Value & " like '%" & Sheet1.Cells(nRow, i).Value & "%' "
  72.        ElseIf (Sheet1.Cells(nRow, i).Value <> ""Then
  73.        strTemp = strTemp & " or " & Sheet1.Cells(1, i).Value & " like '%" & Sheet1.Cells(nRow, i).Value & "%'"
  74.        ElseIf (Sheet1.Cells(nRow, i).Value = "" And nRow <> 2) Then
  75. '       strTemp = strTemp & " aaa) "
  76. '       ElseIf (Sheet1.Cells(nRow, i).Value = "") Then
  77.        
  78.     End If
  79.     nRow = nRow + 1
  80.     Loop Until (Sheet1.Cells(nRow, i).Value = "")
  81.     
  82.     If (strTemp <> ""Then
  83.     strSql = strSql & strTemp
  84.     strSql = strSql & ")"
  85.     End If
  86.  Next
  87.  getSql = strSql
  88. End Function

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值