我的逻辑/代码非常简单,从SQL表计数行,将此值存储到注册表项。如果从SQL查询中读取的值大于RegKey的值,请使用查询结果更新RegKey的值,同样将值保存到日志文件中。如果,SQL查询的值等于RegKey值,则不将结果存储到RegKey,而是将0写入日志文件。
我运行此代码,似乎它不喜欢我的IF语句/运算符。测试一下,如果我设置操作“tempSQLCount(0,0)< strRegKeyVal”或“tempSQLCount(0,0)<> strRegKeyVal”,它似乎才有效。在我的场景中,SQLCounter永远不会小于,仅大于或等于。
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
答案 0 :(得分:0)
直接获取逻辑并将数字转换为正确的类型。 (这主要是评论者建议的内容,但是对于代码改进很难阅读评论):
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
您的脚本由两部分组成:注册表更新部分和日志写入部分。将它拆分为两个任务更容易调试。
流程有点不同;这也涵盖了cInt(tempSQLCount(0,0)) < strRegKeyVal
的情况,但这种情况不应该发生。