【问题标题】:How to make connection of oracle DB using 32bit ODBC via VBScript如何通过 VBScript 使用 32 位 ODBC 连接 oracle DB
【发布时间】:2018-10-19 09:40:50
【问题描述】:

操作系统:Windows7 数据库:Oracle 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

我面临两个问题:

  1. 当我双击这个 vbs 文件时,它显示架构不匹配的错误。 我找到了下面的线程,当我从 syswow64 打开 CMD 并执行脚本时它工作正常,但是当我双击它时显示错误 How do I run a VBScript in 32-bit mode on a 64-bit machine?

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

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

【问题讨论】:

    标签: jenkins cmd vbscript window qtp


    【解决方案1】:

    将此子调用放在脚本的顶部:

    RunAs32()
    

    并在

    中包含这个子
    Sub RunAs32
        Set objShell = CreateObject("Wscript.Shell")
        If objShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then 
            objShell.Run "c:\Windows\SysWow64\cscript.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(以及上述行的来源)的更完整答案,请查看 this post

    基本上,您在脚本顶部对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
    

    【讨论】:

    • 它对我不起作用。虽然第 1 点可以通过更改属性中的 Open with 选项来解决,但第 2 点仍然是一个挑战。
    • 您能否尝试通过从管理命令提示符运行此命令将默认脚本主机更改为 cscript:cscript.exe //H:CScript
    • 它可以在 32 位 CMD 的 Windows 上使用 cscript.exe 找到。我现在需要从 Jenkins 工作中运行它。目前我正在使用 Windows 批处理命令插件。但是每次我执行作业时,都是通过 64 位 CMD 执行的。