我在使用VBScript的旧网站中添加了一些功能("旧"如#34; olde&#34 ;;如在Rip-van-Winkle olde中)。
我的问题的结果是某些逻辑似乎总是等同于单个结果(IsNewBusiness总是显然被赋予了FALSE的值),而它有时应该等同于相反的逻辑:
IsNewBusiness = TRUE 'default (if record not found)
If Not adoRS.EOF Then
IsNewBusiness = adoRS.Fields.Item(0).Value <> 0
End If
所以,既然逻辑总是等于假,我必须假设这一行:
IsNewBusiness = adoRS.Fields.Item(0).Value <> 0
...正在到达,并且adoRS.Fields.Item(0).Value始终为0
正如您在上面的代码中所看到的,IsNewBusiness布尔值设置为TRUE以开始,但永远不会保持为真,尽管在某些情况下它应该(重置)为TRUE(在给定某些参数的情况下,查询结果应该是返回值&#34; -1&#34;而不是0)。
这个问题与我问here的问题有关,但实际上是分开的:
所以,为了达到饼干的关键,我想通过写出一个&#34;调试消息&#34;来绝对确定上面显示的上面的if块是。到控制台或类似的东西。
基于此网站中的遗留代码,我尝试与javascript合作以达到这些目的:
ReturnMsg = "Made it to IsNewBusiness logic"
Response.Write("<script type=""text/javascript"">" & vbCrLf)
Response.Write("alert ('" & ReturnMsg & "');" & vbCrLf)
Response.Write("</script>" & vbCrLf)
......但它似乎没有用 - 我从来没有看到过这个消息。
我也试过这个:
Response.Write("window.alert(ReturnMsg);")
......而且这个:
Response.Write("console.log(ReturnMsg);")
......结果没有区别。我在控制台中看到的只有:
如何完成&#34;警报&#34;或控制台日志消息,或某些此类,使用VBScript,或javascript,或其他什么?
我甚至尝试了一些内联javascript,如下所示:
adoRS.Close()
<script language="javascript">
window.alert("Made it past the IsNewBusiness logic");
</script>
......但它爆炸了......
我尝试过Kul-Tigin提到的技巧,但它似乎对我不起作用。
我改变了这段代码:
currentYear = Year(Now)
SQLString = "Select NewBiz from MasterUnitsprojSales where CYear = " & currentYear & " and Unit = '" & Unit & "'"
adoRS.Open(SQLString, adoCon)
IsNewBusiness = TRUE 'default (if record not found)
If Not adoRS.EOF Then
IsNewBusiness = adoRS.Fields.Item(0).Value <> 0 'Is this ever reached?
End If
adoRS.Close()
......对此:
currentYear = Year(Now)
SQLString = "Select NewBiz from MasterUnitsprojSales where CYear = " & currentYear & " and Unit = '" & Unit & "'"
adoRS.Open(SQLString, adoCon)
IsNewBusiness = TRUE 'default (if record not found)
ReturnMsg = "Before the If Not adoRS.EOF block"
Response.Write("<script type=""text/javascript"">" & vbCrLf)
Response.Write("<!--" & vbCrLf)
Response.Write("alert ('" & ReturnMsg & "');" & vbCrLf)
Response.Write("-->" & vbCrLf)
Response.Write("</script>" & vbCrLf)
If Not adoRS.EOF Then
IsNewBusiness = adoRS.Fields.Item(0).Value <> 0 'Is this ever reached?
ReturnMsg = "Entered the If Not adoRS.EOF block"
Response.Write("<script type=""text/javascript"">" & vbCrLf)
Response.Write("<!--" & vbCrLf)
Response.Write("alert ('" & ReturnMsg & "');" & vbCrLf)
Response.Write("-->" & vbCrLf)
Response.Write("</script>" & vbCrLf)
End If
adoRS.Close()
...运行网站进入该页面,选择查看源,搜索&#34;如果不是adoRS.EOF块&#34;,则没有匹配。我做错了吗?
我也试过了(上面的内容基于页面中的现有代码,下面是基于评论者的代码段):
Response.Write("<!-- Before the If Not adoRS.EOF block -->")
If Not adoRS.EOF Then
IsNewBusiness = adoRS.Fields.Item(0).Value <> 0 'Is this ever reached?
Response.Write("<!-- After the If Not adoRS.EOF block -->")
End If
我能够获得我在View Source中显示的调试信息的唯一方法是插入一些引发错误的javascript。添加此javascript:
<script language="javascript">
window.alert("Before the If Not adoRS.EOF block js");
</script>
在某些情况下:
Response.Write("<!-- Before the If Not adoRS.EOF block -->")
<script language="javascript">
window.alert("Before the If Not adoRS.EOF block js");
</script>
If Not adoRS.EOF Then
...导致它出现在页面上:
Server Error in '/EMS/customerreportingnet' Application.
--------------------------------------------------------------------------------
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: BC30636: '>' expected.
Source Error:
Line 129: IsNewBusiness = TRUE 'default (if record not found)
Line 130: Response.Write("<!-- Before the If Not adoRS.EOF block -->")
Line 131: <script language="javascript">
Line 132: window.alert("Before the If Not adoRS.EOF block js");
Line 133: </script>
Source File: C:\EnhancedMonthlySalesReporting\customerreportingnet\customerreportingnet\pages\custmaint_entry.aspx Line: 131
......这在观看源中:
Line 129: IsNewBusiness = TRUE 'default (if record not found)
Line 130: Response.Write("<!-- Before the If Not adoRS.EOF block -->")
<font color=red>Line 131: <script language="javascript">
</font>Line 132: window.alert("Before the If Not adoRS.EOF block js");
Line 133: </script></pre></code>
......所以我似乎还在Leviathan出没的水域上游游泳。
答案 0 :(得分:2)
让我们调试一下。必须是三件事之一:
If
,并将IsNewBusiness
设置为true。If
,并将IsNewBusiness
设置为false。If
。因此,IsNewBusiness
必须设置为true。IsNewBusiness
的价值未知。一点点思考会让你相信这些案例是详尽无遗的:其中一个必须成为正在发生的事情。
那么,你的工作就是弄清楚这四个案件中哪一个真正发生了。理想情况下,您可以使用调试器附加到站点(您是否已使用Visual Studio&#39;附加到进程&#34;选项?)并在代码中设置断点,只看到哪些断点被击中以及哪些断点被击中#39;吨
但是,无论出于何种原因,我们都说您无法使用调试器。因此,如果是我,我会用Response.Write()
或Trace()
调用来发出输出的代码,就像几位人士在评论中建议的那样,尽可能多地指出可能性。由于Response.Write()
是一个关于代码是否运行(你要么看到它的输出还是你没有)的死亡赠品,这是一个不错的选择。案例1和案例2崩溃成一个案例(现在,您可能只关心计算机是否进入If
,而不是计算机到达后的内部代码。
所以我暂时注释这样的代码:
IsNewBusiness = TRUE 'default (if record not found)
If Not adoRS.EOF Then
IsNewBusiness = adoRS.Fields.Item(0).Value <> 0
Response.Write("<h1>INSIDE IF</h1>")
Else
Response.Write("<h1>INSIDE ELSE</h1>")
End If
(简而言之:在调试时,只要您以后清理突变,就可以安全地改变页面本身的内容以回答问题!)
然后,您可以在加载页面时回答上述情况:
If
语句,adoRS.EOF
必须为假。If
语句,adoRS.EOF
必须为真。