【问题标题】:How to compare numbers in array with resultset?如何将数组中的数字与结果集进行比较?
【发布时间】:2017-05-03 09:20:37
【问题描述】:

以下代码将用户先前选择的项目与数据库中的项目 ID 进行比较,并“检查”那些已选择的项目。所以我有一个所有项目的复选框列表,其中只有他们之前选择的项目被“选中”。这是一个更新订单页面

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("strConn")

strSQL = "SELECT * FROM Items"

'current items selected 
'e.g. 31, 32, 33                    
strItemSelected = curr_Item_IDs & ","                                   

set rs = Conn.Execute(strSQL)

If Not rs.EOF Then

Do while not rs.EOF

response.write "<input type = 'checkbox' "

If InStr(strItemSelected, CStr(rs("ID")) & ",") > 0 Then

response.write("checked = 'checked' ")

END if                  

response.write(" name='item' value=""" & rs("ID") & """> " & 
rs("item_name") & vbcrlf)
response.write("/     ID: " & rs("ID") & "<br />")                                          

rs.movenext

Loop

end if

set rs=nothing

这段代码的作用是 ID 为 31,它选择了“31”,但也选择了“1”。我确实认为是它的 InStr 导致了这个问题,但不确定如何解决这个问题。

任何帮助将不胜感激!

【问题讨论】:

  • @e4c5 没有帮助,如果这是一个新项目,我可能会同意你的看法。然而,很可能这是一个已建立的系统的现有项目,而公司不想重新开发它。我这么说的原因是我经常看到它并且个人必须维护大规模的经典 ASP 内部 Web 应用程序。所以是的,Classic ASP 在这个时代非常活跃。
  • 你能不能只用一个计算列(二进制是、否或数字状态等)基于对所选项目的连接来执行此操作?这将是我个人采用的方法,而不是在代码中执行逻辑,但 RDMS 完成工作。完全取决于你的数据库结构通过,这是否可行。

标签: mysql asp-classic


【解决方案1】:

一种方法是调整您的查询以包含计算列:

'change your query... '
strSQL = "SELECT I.*, case when I.ID in (" & strItemSelected & ") then 'Y' else 'N' end as selected FROM Items I"

然后在你的循环中,用这个替换你的 IF:

If rs("selected") = "Y" Then
    response.write("checked = 'checked' ")
END if  

如果您必须使用代码中的逻辑进行操作并且无法更改查询,则可以使用数组而不是尝试使 INSTR 工作...

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("strConn")    
strSQL = "SELECT * FROM Items"

'current items selected 
'e.g. 31, 32, 33                    
'-----Create an array here instead of a string------
arrItemSelected = SPLIT(curr_Item_IDs,",")

set rs = Conn.Execute(strSQL)

If Not rs.EOF Then        
    Do while not rs.EOF        
        response.write "<input type = 'checkbox' "
        '----Loop through the array-----
        For i=0 To UBound(arrItemSelected) Step 1
            If arrItemSelected(i) = CStr(rs("ID")) Then
               response.write("checked = 'checked' ")
            END if  
        Next

        response.write(" name='item' value=""" & rs("ID") & """> " & 
        rs("item_name") & vbcrlf)
        response.write("/     ID: " & rs("ID") & "<br />")                                          

        rs.movenext

    Loop
End If

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2015-09-22
    • 2013-04-05
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多