excel - Excel 连接到 Oracle 数据库
问题描述
我有一个带有数字列表(a 列)的 Excel 工作表。根据该数字范围,我需要从 Oracle 数据库中的表中检索选定的列并将其带回 B 列中的 Excel。
我打算将带有 vba 代码的电子表格部署给其他用户,所以我不想要一种硬编码到特定计算机的方法。
我有以下信息:Oracle 数据库名称、Oracle 用户名、Oracle 密码、Oracle 表名
我在网上找到了一个代码,它使用一个公式来调用 vba 代码来连接到 Oracle。返回结果时,我收到 #Value 错误消息。B1 列中有一个公式 [=GetToadData(A1)],用于检索 A1 列中的查找值。这会触发 VBA 函数代码连接到 Oracle 并检索请求的数据 [HANDSET_SERIAL_NUMBER_NEW, SERVREQ_TRANSACTION_TS]。
我得到 #value 作为公式结果,这意味着我的 sql 代码或连接字符串有问题。如果需要,我可以澄清任何事情。
XXXXX = 用户定义的输入
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
解决方案
如果您的 IMEI 是数字,则:
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
(未找到匹配项)
尝试从 sub 调用您的函数,任何错误都会更加明显:
Sub testOracle()
Debug.Print GetToadData(1234)
End sub
编辑- 缓存示例(未经测试)
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
推荐阅读
- python - STATICFILES_DIRS 设置使我的管理小部件覆盖消失
- boost - 尝试在 ros 2、windows 10 上编译 cv_bridge 包时出现“找不到 Boost(缺少:python)(找到版本 1.58.0)”
- java - Eclipse 以调试模式暂停我的进程
- python-3.x - Python - 这段代码可以更高效吗?
- java - 我可以在 xcode 11.1、mac os Catalina 中编写 Java 代码吗?
- mysql - 在其他一些条件下如何选择最新的工资?MySQL
- python - 为什么在我的笔记本电脑上通过 tensorflow 运行预训练模型需要 30 分钟(太慢),而在其他台式机上需要 1 秒?
- android - 从服务打开屏幕
- laravel - 如何从代码中删除 ParseInt NaN 问题?
- reactjs - 无法使用反应在 twilio 可编程聊天中更新刷新的令牌