2

単純な html テーブルを含む従来の ASP ページがあり、データベースから取得した不明な数のレコードに基づいてテーブル行をループしたいのですが、do/while ループでレコードをループすると、次のようになります。 BOF または EOF のいずれかが True であるというエラー。表の 1 行おきに背景色 (CSS で設定した色) を交互に表示したい。

<% do while not rsTest.eof %>
<tr class="odd">
<td colspan="5"><%=(rsTest.Fields.Item("field").Value)%></td>
</tr>

<% rsTest.moveNext
if not rsTest.eof then 
count = count + 1 %>
<tr class="even">
<td colspan="5"><%=(rsTest.Fields.Item("field").Value)%></td>
</tr>
<% end if %>

<% count = count + 1 
rsTest.moveNext 
loop %>

ブラウザによると、ループの直前の最後の「rsRoster.moveNext」でエラーが発生しています。データベースからプルされるレコードの数が偶数の場合、ループはエラーになりませんが、奇数のレコードがプルされる場合はエラーになります。「EOFの場合は何もしない、そうでなければコードを実行する」を挿入しようとしましたが、そうするとEOFが無視されるかどうかをチェックするコードが無視されているようです。任意の提案をいただければ幸いです。

4

4 に答える 4

3

私はこれに錆びていることを知っていますが、これを試してください:

<% 
  Dim oddFlag
  oddFlag = 1
  do while not rsTest.eof 
  if oddFlag=1 Then 
    oddFlag=0
    Response.write("<tr class='odd'>")
    Response.write("<td colspan='5'>")
    Response.write(rsTest.Fields.Item("field").Value)
    Response.write("</td></tr>")
  else 
    oddFlag=1 
    Response.write("<tr class='even'>")
    Response.write("<td colspan='5'>")
    Response.write(rsTest.Fields.Item("field").Value)
    Response.write("</td></tr>")
  end if
  rsTest.moveNext 
 loop 
%>
于 2013-11-15T03:32:53.133 に答える
2

他の回答ではこれについて言及されていないため、コードの問題は MoveNext を2回実行していることであり、2番目のものは最初のものがすでにEOFに達しているかどうかをテストしません。

いずれにせよ、これは色を交互に行うには不必要に複雑な方法です。

dim i, rs
'... database stuff, table header, etc.
i = 0
Do Until rs.EOF
   i = i + 1
   Response.Write "<tr class='"
   If i Mod 2 = 0 Then Response.Write "even" Else Response.Write "odd" End If
   Response.Write "'>"
   '... write out the actual content of the table
   Response.Write "</tr>"
   rs.Movenext
Loop
'... clean up database, close table

この方法では、カウンター変数 ( i) を実際のカウンターとして使用できます。たとえば、最後に「返された行数」メッセージを書きたい場合は、それが可能です。

于 2013-11-15T15:08:07.463 に答える
1

ここでは少しずさんですが、これは私が通常これを達成する方法です:

<%
Dim i
i = 1
do while not rsTest.eof
If i = 1 Then %>
<tr class="odd">
<% Else %>
<tr class="even">
<% End If %>
<td colspan="5"><%=(rsTest.Fields.Item("field").Value)%></td>
</tr>
<% 
i = i + 1
If i = 3 Then i = 1
count = count + 1
rsTest.moveNext 
loop %>
于 2013-11-15T03:09:19.020 に答える