标签: vbscript

从Classic ASP执行存储过程

出于一些奇妙的原因,我发现自己在经典ASP页面中调试了一个问题(在过去的两天里我至少失去了10年的生命).

我正在尝试执行包含一些OUT参数的存储过程.问题是当存储过程返回时,没有填充其中一个OUT参数.我可以从SQL管理工作室(这是2008)执行存储过程,并且所有值都被设置并完全按预期返回.

declare @inVar1 varchar(255)
declare @inVar2 varchar(255)
declare @outVar1 varchar(255)
declare @outVar2 varchar(255)

SET @inVar2  = 'someValue'

exec theStoredProc @inVar1 , @inVar2 , @outVar1 OUT, @outVar2 OUT

print '@outVar1=' + @outVar1
print '@outVar2=' + @outVar2 
Run Code Online (Sandbox Code Playgroud)

效果很好.太棒了.完善.我期待的确切值将被返回并打印出来.

是的,因为我正在尝试调试经典ASP页面,所以我将代码复制到VBScript文件中以尝试缩小问题范围.

这是我想出的:

Set Conn = CreateObject("ADODB.Connection")
Conn.Open "xxx"

Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn

objCommandSec.CommandType = 4
objCommandSec.CommandText = "theStoredProc "

objCommandSec.Parameters.Refresh

objCommandSec.Parameters(2) = "someValue"

objCommandSec.Execute

MsgBox(objCommandSec.Parameters(3))
Run Code Online (Sandbox Code Playgroud)

不行.一点儿都没有.(我生命中的另外十年)第三个参数只是NULL - 这也是我在Classic ASP页面中遇到的.

有人可以对此有所了解吗?我认为经典的ASP代码与VBScript代码相同,我是完全愚蠢的吗?我认为它使用相同的脚本引擎和语法,所以我应该没问题,但我不是100%肯定.

我从VBScript中看到的结果与我在ASP中看到的结果相同.

vbscript asp-classic

6
推荐指数
1
解决办法
3万
查看次数

可以在VBScript中访问WMI对象的属性BY NAME吗?

而不是像这样的代码:

On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_IP4RouteTable",,48)
For Each objItem in colItems
    Wscript.Echo "Age: " & objItem.Age
    Wscript.Echo "Caption: " & objItem.Caption
    Wscript.Echo "Description: " & objItem.Description
Next
Run Code Online (Sandbox Code Playgroud)

是否可以按名称访问每个属性,类似于以下语法之一:

Wscript.Echo "Age: " & objItem("Age")
Wscript.Echo "Age: " & objItem.Properties("Age")
Wscript.Echo "Age: " & objItem.Item("Age")
Run Code Online (Sandbox Code Playgroud)

甚至更好,有什么办法可以做到这样的事情:

Dim colItems
Dim objItem
Dim aProperty
Set colItems = objWMIService.ExecQuery("Select * from Win32_IP4RouteTable",,48)
For Each objItem in colItems
   For …
Run Code Online (Sandbox Code Playgroud)

com vbscript wmi

6
推荐指数
1
解决办法
4505
查看次数

如何确定动态数组是否未在VBScript中标注尺寸

假设我在VBScript中创建了一个动态数组

Dim myArray()
Run Code Online (Sandbox Code Playgroud)

稍后我如何检查这个数组从未被标注过尺寸?

Ubound(myArray) 'sub script out of range
Lbound(myArray) 'sub script out of range
IsEmpty(myArray) 'returns false
Run Code Online (Sandbox Code Playgroud)

arrays vbscript

6
推荐指数
1
解决办法
4175
查看次数

VBScript ISO8601

在VBScript中,是否FormatDateTime有ISO 8601支持?

如果没有,我将如何编写这样的功能呢?

例如:

Response.Write FormatAsISO8601(#05/04/2011#)

Function FormatAsISO8601(datetime)
    ...
End Function
Run Code Online (Sandbox Code Playgroud)

vbscript datetime iso8601 asp-classic

6
推荐指数
1
解决办法
6594
查看次数

查询SQL数据库时出现EOF和BOF错误

我正在尝试从vbs查询SQL数据库,但是当没有找到记录时,我收到错误

ADODB.Field:BOF或EOF为True,或者当前记录已被删除.请求的操作需要当前记录.

我想我需要使用IF NOT语句来捕获是否找不到记录,但我无法弄清楚它需要去哪里.

Do Until objFile.AtEndofStream
    strAppName = objFile.ReadLine

    ConnString="DRIVER={SQL Server};SERVER=aardvark002;UID=***;PWD=***;DATABASE=DEW_Users"
    SQL = "USE Win7AppData SELECT " & Chr(34) & strCountry & Chr(34) & " FROM AppsByCountry WHERE Application = '" & strAppName & "'"

    Set Connection = CreateObject("ADODB.Connection")
    Set Recordset = CreateObject("ADODB.Recordset")
    Connection.Open ConnString
    Recordset.Open SQL,Connection
    strApproval = Recordset(strCountry)
    If StrApproval = "YES" Then
        strApproval = "Approved"
    Else
        strApproval = "Denied"
    End If
    objExcel.Cells(intRow, 1).Value = strAppname 
    objExcel.Cells(intRow, 2).Value = strCountry
    objExcel.Cells(intRow, 3).Value = strApproval
    intRow = intRow …
Run Code Online (Sandbox Code Playgroud)

sql vbscript

6
推荐指数
1
解决办法
3万
查看次数

使用vbscript激活(带到前台)特定窗口

我甚至不确定从哪里开始我的问题,我尝试了几百个东西并用谷歌搜索了几个小时但没有找到任何有用的东西.(我对每一个肮脏的把戏持开放态度.)

这是我的问题:

我有一个带有列表框的.hta文件,如下所示:

hta文件

它列出了我的SAP Gui运行的所有会话/ modi.

        Set SapGuiAuto  = GetObject("SAPGUI")
        Set application = SapGuiAuto.GetScriptingEngine

        If application.Connections.Count > 0 Then
            Set connection  = application.Children(0)

            If connection.Sessions.Count > 0 Then
                Set session = connection.Children(0)
            End If
        End If


        If IsObject(WScript) Then
            WScript.ConnectObject session,     "on"
            WScript.ConnectObject application, "on"
        End If

Set optGroup = Document.createElement("OPTGROUP")
    optGroup.label = "Server"


    'count all connected servers 
    ConnectionCount = application.Connections.Count




        If ConnectionCount > 0 Then
            Sessionlist.appendChild(optGroup)

            Else 
            optGroup.label = "No connection here."


        End If
        'count …
Run Code Online (Sandbox Code Playgroud)

windows vbscript sap

6
推荐指数
1
解决办法
2万
查看次数

检查子或函数是否存在

有没有办法检查子或函数是否存在?

sub mySub()
 'some code
end sub
Run Code Online (Sandbox Code Playgroud)

就像是 if exist(mySub)

vbscript asp-classic

6
推荐指数
1
解决办法
2061
查看次数

VBS中的Hello世界

我几天前开始玩VBScript了,有一个问题让我感到恼火.我试过测试简单的hello world程序:

Module Hello
  Sub Main()
      MsgBox("Hello, World!") ' Display message on computer screen.
  End Sub 
End Module
Run Code Online (Sandbox Code Playgroud)

当我cscript "hello world.vbs"从cmd 运行它时.我收到一个错误: M:\hello world.vbs(6, 1) Microsoft VBScript compilation error: Expected statement

当我仅将代码更改为: MsgBox("Hello, World!") ' Display message on computer screen. 代码正常运行.有一条弹出消息,没有错误.我使用的是Win 7 SP1,Sublime text 3,我安装了.Net 4.5; 4.6.

我对.VBS有点小说,所以请不要苛刻.谢谢xD.

vbscript vba window

6
推荐指数
2
解决办法
2万
查看次数

使用Classic ASP在XML文档中附加子项

我有以下asp-classic代码,它将3个变量附加到XML文档中,'location_x','location_y'和'date_and_time'.

ASP-Classic代码 - 创建或附加现有XML文档.

Function LoadObjecttoXML(strXMLFilePath, strFileName)

    Dim objDom
    Dim objGpx
    Dim objWpt
    Dim objRte
    Dim objRtept
    Dim objDateTime
    Dim objattLat
    Dim objattLon
    Dim objPI
    Dim blnFileExists

    'Instantiate the Microsoft XMLDOM
    Set objDom = server.CreateObject("Microsoft.XMLDOM")
    objDom.preserveWhiteSpace = True

    blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)

    If blnFileExists = True Then
        Set objGpx = objDom.documentElement
    Else
        'GPX root element and append it to the XML document.
        Set objGpx = objDom.createElement("gpx")
        objDom.appendChild objGpx                                   
    End If

    Set objWpt = objDom.createElement("wpt")

        'Create "Lat" attribute' …
Run Code Online (Sandbox Code Playgroud)

xml vbscript dom gpx asp-classic

6
推荐指数
1
解决办法
1215
查看次数

如何在VBS中创建循环?

我有一个连接到FoxPro数据库的VBS脚本.

Dim oCN : Set oCN = CreateObject("ADODB.CONNECTION")
oCN.Open sCS
Dim oRS : Set oRS = oCN.Execute("SELECT SN_ANALSYS, SN_CRLIM, SN_CURRBAL FROM " & WScript.Arguments(0) & "_SNAME.DBF WHERE SN_ANALSYS != '' ORDER BY SN_ANALSYS ASC")
Do Until oRS.EOF
   WScript.Echo oRS.Fields(0).value, "50", oRS.Fields(1).Value
   WScript.Echo oRS.Fields(0).value, "51", oRS.Fields(2).Value
   oRS.MoveNext
Loop
oCN.Close
Run Code Online (Sandbox Code Playgroud)

我通过BAT运行它:

C:\query.vbs A > \\share\results.txt
Run Code Online (Sandbox Code Playgroud)

A是在查询中使用(WScript.Arguments(0)).但是我希望能够这样做:

C:\query.vbs A,D > \\share\results.txt
Run Code Online (Sandbox Code Playgroud)

因此,它使用A和运行2个查询,D但结果是相同的results.txt.

vbscript batch-file

6
推荐指数
1
解决办法
267
查看次数

标签 统计

vbscript ×10

asp-classic ×4

arrays ×1

batch-file ×1

com ×1

datetime ×1

dom ×1

gpx ×1

iso8601 ×1

sap ×1

sql ×1

vba ×1

window ×1

windows ×1

wmi ×1

xml ×1