出于一些奇妙的原因,我发现自己在经典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中看到的结果相同.
而不是像这样的代码:
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) 假设我在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) 在VBScript中,是否FormatDateTime有ISO 8601支持?
如果没有,我将如何编写这样的功能呢?
例如:
Response.Write FormatAsISO8601(#05/04/2011#)
Function FormatAsISO8601(datetime)
...
End Function
Run Code Online (Sandbox Code Playgroud) 我正在尝试从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) 我甚至不确定从哪里开始我的问题,我尝试了几百个东西并用谷歌搜索了几个小时但没有找到任何有用的东西.(我对每一个肮脏的把戏持开放态度.)
这是我的问题:
我有一个带有列表框的.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) 有没有办法检查子或函数是否存在?
sub mySub()
'some code
end sub
Run Code Online (Sandbox Code Playgroud)
就像是 if exist(mySub)
我几天前开始玩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.
我有以下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) 我有一个连接到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.