If statement VBS中断的If语句/逻辑

If statement VBS中断的If语句/逻辑,if-statement,vbscript,registry,operators,logic,If Statement,Vbscript,Registry,Operators,Logic,我的逻辑/代码非常简单:从SQL表中计算行数,将此值存储到注册表项。如果从SQL查询读取的值大于RegKey的值,则使用查询结果更新RegKey的值,同样,将该值保存到日志文件中。如果SQL查询的值等于RegKey值,则不将结果存储到RegKey,而是将0写入日志文件 我运行这段代码,它似乎不喜欢我的IF语句/运算符。为了测试这一点,只有当我设置操作“tempSQLCount(0,0)

我的逻辑/代码非常简单:从SQL表中计算行数,将此值存储到注册表项。如果从SQL查询读取的值大于RegKey的值,则使用查询结果更新RegKey的值,同样,将该值保存到日志文件中。如果SQL查询的值等于RegKey值,则不将结果存储到RegKey,而是将0写入日志文件

我运行这段代码,它似乎不喜欢我的IF语句/运算符。为了测试这一点,只有当我设置操作“tempSQLCount(0,0)
    strRegKeyVal = readfromRegistry("HKEY_LOCAL_MACHINE\SOFTWARE\SQLCounter1", "ha")
'Dim intRegKeyVal = CInt(strRegKeyVal)

If tempSQLCount(0,0) > strRegKeyVal Then
    'update row counter value to regKey 
    strValueName = "SQLCounter1"
    objRegistry.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
    objRegistry.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,tempSQLCount(0,0)

    Set objFSO=CreateObject("Scripting.FileSystemObject")

    'write to log
    outFile="C:\Logs\some.log"
    Set objFile = objFSO.CreateTextFile(outFile,True)
    objFile.Write tempSQLCount(0,0) & vbCrLf
    objFile.Close
End If
If tempSQLCount(0,0) = strRegKeyVal Then
    'update row counter value to regKey 

    Set objFSO=CreateObject("Scripting.FileSystemObject")

    'write to log
    outFile="C:\Logs\some.log"
    Set objFile = objFSO.CreateTextFile(outFile,True)
    objFile.Write 0 & vbCrLf
    objFile.Close
End If

把你的逻辑弄清楚,把你的数字转换成正确的类型。(这主要是评论者的建议,但要改进代码,很难阅读评论者的意见):

脚本由两部分组成:注册表更新部分和日志写入部分。将其分为两个任务更容易调试。
流程有点不同;这也涵盖了如果
cInt(tempSQLCount(0,0))
的情况,但这种情况无论如何都不应该发生。

WScript.Echo tempSQLCount(0,0)和“(”&TypeName(tempSQLCount(0,0))&“
WScript.Echo stregkeyval&”(&TypeName(stregkeyval))的输出是什么
?我怀疑您在比较数字时无意中比较了字符串,所以您所做的是按照字母顺序进行比较。在这种情况下,“9”大于“10”;CINT()可能很重要。此外,考虑将TEMPPSQLCOUNT的结果存储在变量中。按照现在编写的方式,您可能会多次调用DB—这不仅从性能角度看很糟糕,而且每次都可能得到不同的结果!最后,考虑一个ELSIF而不是一个单独的IF块。正如目前编写的那样,两个If块都可以在特定情况下运行。我会将比较变量写入日志:将
设置objFSO
置于If块上方,然后
objFile.WriteLine“tempSQLCount(0,0)=”&tempSQLCount(0,0)&“[”&TypeName(tempSQLCount(0,0))&”]”
,以及
objFile.WriteLine“stregkeyval=”&strRegKeyVal&“[”&TypeName(strRegKeyVal))&“]”
。关闭If块下方的文件。感谢您的整合。有意思。。在开发中工作正常,但在生产中却不行。我把我的问题缩小到它不喜欢CINT()函数这一事实。。
dim strRegKeyVal, sqlCountToReport, sqlCount

' both values are converted to Int
strRegKeyVal = cInt(readfromRegistry("HKEY_LOCAL_MACHINE\SOFTWARE\SQLCounter1", "ha"))
sqlCount = cInt(tempSQLCount(0,0))

' Conditional registry write part
If sqlCount > strRegKeyVal Then
    'update row counter value to regKey 
    strValueName = "SQLCounter1"
    objRegistry.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
    objRegistry.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName, sqlCount
    sqlCountToReport = sqlCount
else
    sqlCountToReport = 0    
End If

' Write to log part
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("C:\Logs\some.log", True)
objFile.Write sqlCountToReport & vbCrLf
objFile.Close