2017-05-03 7 views
0

以下のコード比較項目は、ユーザーがデータベースからアイテム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 

である、それは「31」を選択しただけでなく、「1」を選択し、31のIDです。私はその問題を引き起こしているInStrを考えているが、問題を解決する方法は不明である。

助けていただけたら幸いです!あなたがそれを行う必要がある場合

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

:これであなたのIFを置き換える、あなたのループ内で次に

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

:計算列が含まれるようにクエリを調整することであろう

+0

@ e4c5 Not helpfuもしこれが新しいプロジェクトだったら、私はあなたに同意するかもしれない。しかし、これは確立されたシステムのための既存のプロジェクトであり、会社はそれを再開発したくないという可能性もあります。私がこれを言う理由は、いつもそれを見て、大規模なClassic ASP内部Webアプリケーションを個人的に維持しなければならないからです。そう、はい、クラシックASPは非常にこの日と時代に生きています。 – Lankymart

+0

計算された列*(バイナリのはい、いいえ、数字の状態など)でこれを行うことはできませんか?*選択した項目との結合に基づいていますか?これは、コードでロジックを実行するのではなく、RDMSが作業を行うのではなく、私が個人的に取るアプローチです。これが実行可能かどうかにかかわらず、データベース構造全体に完全に依存します。 – Lankymart

答えて

0

一つの方法コード内のロジックは、クエリを変更することはできません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 
関連する問題