1

この質問に対する他の回答のいくつかからコードを巡航して実装しましたが、まだ運がありません。私はまだエラーが発生しています。

    If ((bReport And bIsDate And CheckPermissions("lotsales")) Or Request.QueryString("report")) Then
    OpenDB
    Dim oRs, sSQL, sSQL2, iCancellations, iSales, sDate, sInitDate, sEndDate, iPhaseID, iPhaseNumber, rowCount

    sInitDate = Request("startDate")
    sEndDate = Request("endDate")
    sSQL = "sp_get_lot_sales_test '" & sInitDate & "', '" & sEndDate & "', " & sPhase & ", '" & sReportView & "'"

    'response.write vbNewLine & "<!-- sql: " & sSQL & "-->" & vbNewLine
    'response.write sSQL
    'response.Flush
    Set oRs = ExecuteCommand(sSQL,1) 
End If

そして、ここでエラーが発生します-

If (oRs.EOF) Then <-- fails here
       Response.Write("<TR><TD ALIGN=""center"">There is no data to report on!</TD></TR>")
    Else
        Do While Not oRs.EOF

最後の手段として、ストアド プロシージャに戻って分解し、すべてが正常であることを確認します。エラーが発生する理由について誰かが洞察を持っていますか? 私はどこにもクローズを発行していません。

ここに ExecuteCommand 関数があります -

Function ExecuteCommand(s,i)
    On Error Resume Next
    Set ExecuteCommand = oDBc.Execute(s, , i)
End Function
4

4 に答える 4

17

これは古いかもしれませんが、そのエラーに頻繁に出くわします (オブジェクトが閉じている場合、操作は許可されません)。

私がしているのはストアドプロシージャです。次を追加します。

NOCOUNTをオンに設定

ANSI_WARNINGS をオフに設定

手順のASのすぐ下。

それだけで問題は解決します。

于 2013-05-17T20:35:22.997 に答える
5

以前の開発者から引き継いだコードであるクライアント用の古い Classic ASP コードを保守していますが、このバグで 4 時間も気が狂いそうになりました。

最終的に、関連する SQL ストアド プロシージャでいくつかの PRINT ステートメントを発見しました。これらは、トラブルシューティングや値のチェックのためにありましたが、実際には行を返さないのに、これが失敗する原因となりました。

Set cnContentDB = Server.CreateObject("ADODB.Connection")
cnContentDB2.Open sString

sSQL = "EXEC YourStoredProc"

Set oRS2 = Server.CreateObject("ADODB.Recordset")
oRS2.Open sSQL, cnContentDB

if not oR2.EOF then   'THIS WAS GIVING THE ERROR,
                      'EVEN THOUGH THE STORED PROC ALWAYS RETURNS RECORDS

Print ステートメントを削除したところ、エラーはなくなりました。

于 2015-02-02T23:45:39.153 に答える
0

接続オブジェクトが必要です。

set conn = server.CreateObject("adodb.connection")
set oRs = conn.execute(sSql)
于 2012-10-09T20:05:14.090 に答える