首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与Oracle数据库的Excel连接

与Oracle数据库的Excel连接
EN

Stack Overflow用户
提问于 2019-03-22 03:32:41
回答 1查看 153关注 0票数 0

我有一个包含数字列表(列a)的Excel工作表。根据这个数字范围,我需要从Oracle数据库的表中检索选定的列,并将其带回Excel的B列中。

我打算将包含vba代码的电子表格部署给其他用户,因此我不希望将方法硬编码到特定的计算机上。

我有以下信息: Oracle数据库名称、Oracle用户名、Oracle密码、Oracle表名

我在网上找到一段代码,它使用一个公式来调用vba代码来连接到Oracle。返回结果时,我收到#Value错误消息。在列B1中有一个公式=GetToadData( A1 ),它检索列A1中的查找值。这将触发VBA函数代码连接到Oracle并检索所请求的数据HANDSET_SERIAL_NUMBER_NEW SERVREQ_TRANSACTION_TS。

我将获得#value作为公式结果,这意味着我的sql代码或连接字符串有问题。如果需要的话,我可以澄清任何事情。

XXXXX =用户定义输入

代码语言:javascript
复制
Function GetToadData(IMEI)    
    Dim Conn As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    Dim Cmd As New ADODB.Command

    Conn.Open "PROVIDER=MSDAORA.Oracle;DATA SOURCE=XXXXX;USER ID=XXXXX;PASSWORD=XXXXX"
    Cmd.ActiveConnection = Conn
    Cmd.CommandType = adCmdText
    Cmd.CommandText = "select HANDSET_SERIAL_NUMBER_NEW, SERVREQ_TRANSACTION_TS,  from mi_tempadm.wome_tm_data_new where HANDSET_SERIAL_NUMBER_NEW  = IMEI;"                                           

    Set RS = Cmd.Execute
    GetToadData = RS.Fields(0).Value
End Function
EN

回答 1

Stack Overflow用户

发布于 2019-03-22 05:26:44

如果您的IMEI是数字,则:

代码语言:javascript
复制
Cmd.CommandText = "select HANDSET_SERIAL_NUMBER_NEW, SERVREQ_TRANSACTION_TS, " & _ 
    " from mi_tempadm.wome_tm_data_new where HANDSET_SERIAL_NUMBER_NEW  = " & IMEI

如果不是数字,则用'括起来

如果为RS.EOF (未找到匹配项),请不要忘记添加检查

尝试从子函数调用您的函数,任何错误都将更加明显:

代码语言:javascript
复制
Sub testOracle()

   Debug.Print GetToadData(1234)

End sub

编辑-缓存示例(未经测试)

代码语言:javascript
复制
 Function GetToadData(IMEI)

    Dim Conn As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    Dim Cmd As New ADODB.Command
    Static cache as Object

    'create cache if not already created
    If cache Is Nothing Then Set cache = CreateObject("scripting.dictionary")

    If Not cache.exists(IMEI) Then
        Conn.Open "PROVIDER=MSDAORA.Oracle;DATA SOURCE=XXXXX;" & _
                   "USER ID=XXXXX;PASSWORD=XXXXX"
        Cmd.ActiveConnection = Conn
        Cmd.CommandType = adCmdText
        Cmd.CommandText = " select HANDSET_SERIAL_NUMBER_NEW, SERVREQ_TRANSACTION_TS, " & _
                          " from mi_tempadm.wome_tm_data_new " & _
                          " where HANDSET_SERIAL_NUMBER_NEW=" & IMEI
        Set RS = Cmd.Execute
        If Not RS.EOF Then
            cache(IMEI) = RS.Fields(0).Value
        Else
            cache(IMEI) = "????"
        End If
    End If 'not cached

    GetToadData = cache(IMEI)


End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55288045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档