如何通过VBScript使用32位ODBC连接oracle数据库



OS : Windows7 数据库:甲骨文 11 企业版 11.2.0.4.0 DSN:SYSWOW64年在ODBC中创建的DSN

我有一个连接到 Oracle DB 并执行查询并返回结果的 vbs 文件,我根据该文件执行一些操作。

Call db_connect(curSession, "DSN=INTDB;UID=RAKHSH;PWD=fdfg4qprd;")
strQuery="select count(*) from atmn.vc_run;"
call db_execute_query(curSession, strQuery)
intCount = db_get_rows_count_SQL(curSession, strQuery)
Public Function db_connect( byRef curSession ,DSN)
Set curSession = createobject("ADODB.Connection")
curSession.connectionstring = DSN
curSession.open
if Err.Number = 0 then
db_connect=1
else
db_connect=0
end If
End Function

我面临 2 个问题:

  1. 当我双击此vbs文件时,它显示架构不匹配的错误。 我找到了下面的线程,当我从 syswow64 打开 CMD 并执行脚本时,它工作正常,但当我双击它时它显示错误 如何在 64 位计算机上以 32 位模式运行 VBScript?

  2. 我还需要使用 CSCRIPT 从 jenkin 作业运行它,它在 jenkin 控制台中显示相同的消息

自过去 2 天以来,我一直在谷歌上搜索各种解决方案,但找不到任何解决方案。

把这个子调用放在脚本的顶部:

RunAs32()

并将此子包含在

Sub RunAs32
Set objShell = CreateObject("Wscript.Shell")
If objShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then 
objShell.Run "c:WindowsSysWow64cscript.exe """ & WScript.ScriptFullName & """",1,False
WScript.Quit
End If 
End Sub 

如果 cscript 引擎以 64 位运行,则环境变量PROCESSOR_ARCHITECTURE将等于AMD64,否则将x86。如果是AMD64您可以使用 32 位版本的 cscript 在另一个进程中重新启动脚本,然后退出原始脚本。

请记住,如果您通常双击脚本来运行它,这将打开wscript.exe。您可以使用以下行检查调用引擎:

pcengine = LCase(Mid(WScript.FullName, InstrRev(WScript.FullName,"")+1))

有关检查wscript与cscript的更完整答案(以及上述行的来源(,请查看这篇文章

本质上,您在脚本顶部放置了类似的调用checkengine,然后包含以下子:

Sub checkengine
pcengine = LCase(Mid(WScript.FullName, InstrRev(WScript.FullName,"")+1))
' BEGIN CALLOUT A
If Not pcengine="cscript.exe" Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "CSCRIPT.EXE """ & WScript.ScriptFullName & """"
WScript.Quit
End If
' END CALLOUT A
End Sub

最新更新