0

私は次のコードを持っています:

strSQL = "SELECT COUNT(*) AS anz FROM tbl_ergebnisse WHERE testavg >0"
set rs3 = Conn.Execute(strSQL)
Response.Write "Count(*): <br>" 
if not rs3.eof then
    Response.Write "Anz: " & rs3("anz")
else
    Response.Write "EOF" 
end if

strSQL = "SELECT testavg FROM tbl_ergebnisse WHERE testavg >0"
set rs2 = Conn.Execute(strSQL)

Response.Write "Entries: <br>" 
do while not rs2.eof
    Response.Write rs2("testavg") & "<br>"
rs2.MoveNext()
loop

strSQL = "SELECT AVG(testavg) AS mittelwert FROM tbl_ergebnisse WHERE testavg >0"
set rs = Conn.Execute(strSQL)

if not rs.eof then
    Response.Write "Mittelwert: " & rs("mittelwert")
else
    Response.Write "EOF" 
end if

これは奇妙な結果をもたらします。クエリ1は「4」を返します(カウントは正しいです)。クエリ2は結果を返さず、クエリ3も結果を返しません

テーブル「tbl_ergebnisse」は次のようになります

testavg (DECIMAL)

エントリ付き:3; 3; 4; 5;

表のデータのスクリーンショットはここにあります:www.trinews.at/data.png

ここに画像の説明を入力してください

空のレコードセットを取得する理由はありますか?データベースで直接クエリを実行すると、正しい値が返されます。

4

2 に答える 2

0

MySQLステートメントでCASTを使用して、10進型をASP ADODBが理解できる数値に変換してみてください。そうしないと、ASPはMySQLからの結果を認識できず、EOFであると見なします。例:

SELECT CAST(SUM(Entry_Data_1) as UNSIGNED) as score FROM contests_entries 
于 2012-06-05T17:09:08.287 に答える
0

フィールドタイプがDecimal(18,0)のSQL Server Expressで問題を再現しましたが、期待どおりに機能しました。

以下のようにCDblを使用して結果をdoubleに変換してみてください。

strSQL = "SELECT testavg FROM tbl_ergebnisse WHERE testavg >0" 
set rs2 = Conn.Execute(strSQL)  
Response.Write "Entries: <br>"  
do while not rs2.eof     
    Response.Write CDbl(rs2("testavg")) & "<br>" 
rs2.MoveNext() 
loop  



strSQL = "SELECT AVG(testavg) AS mittelwert FROM tbl_ergebnisse WHERE testavg >0"
set rs = Conn.Execute(strSQL)  
if not rs.eof then     
    Response.Write "Mittelwert: " & CDbl(rs("mittelwert"))
else     
    Response.Write "EOF"  
end if 
于 2012-06-01T09:21:56.823 に答える