【问题标题】:Classic ASP-Determine if any records have been returned from a query经典 ASP-确定是否从查询中返回了任何记录
【发布时间】:2019-09-22 10:14:27
【问题描述】:

我有一个经典的 ASP 网页,它从数据库中检索数据并将其显示在 HTML 表中。在某些情况下,可能没有任何数据,我想捕获这种情况并显示一条信息性消息。这是我的代码的 sn-ps:

MySite = "filedsn=" & Server.MapPath("/" & WebName & "/fpdb/reffiles/accessdsn.dsn") &      ";DBQ=" & Server.MapPath("/" & WebName & "/fpdb/reffiles/my.mdb") & ";DefaultDir=" _
& Server.MapPath("/" & WebName & "/") & ";"
set MyDatabase = server.createobject("ADODB.Connection")
Mydatabase.open(MySite) 

strSQLMin = "SELECT Format(Min(Date_Time),'dd/mm/yy') AS MinOfDate_Reading, Format(Min(INV_Bat), '###0.0') AS MinOfTempBat, " _
& "Format(Min(INV_tfmr), '###0.0') AS MinOfTempTransf, Format(Min(INV_FET), '###0.0') AS MinOfTempFET, " _
& "Min(BMK_soc) AS MinOfStateOfCharge, min(BMK_vdc) AS MinOfBatDCVolts, Format(Min(BMK_adc),'###0') AS MinOfBatDCAmps, " _
& "Min(INV_VACout) AS MinOfInvACVoltsOut, Min(INV_AACout) AS MinOfWInvACAmpsOut, format(Min(INV_VACin),'###0') AS MinOfInvACVoltsIn, " _
& "Format(Min(INV_AACin),'###0') AS MinOfInvACAmpsIn, Format(Min(INV_vdc),'###0') AS MinOfInvDCVolts, " _
& "Format(Min(INV_adc),'###0') AS MinOfInvDCAmps, Format(Min(INV_Hz),'###0') AS MinOfACFreq " _
& "FROM magnum2 WHERE (((tbl2.Date_Time)<Now() And (tbl2.Date_Time)>Now()-1))"

set WeekRecMin = MyDatabase.Execute(strSQLMin)

为了在创建和填充网页表格之前检查是否返回了任何记录,我在表格周围添加了这段代码

<% response.write("<h2>EOF and BOF are : " & weekRecMin.eof & "  -  " & weekRecMin.bof & "</h2>") %>
<% if WeekRecMin.EOF=true then %>
...HTML code ...
<% else %>
<% response.write("<tr><td class='auto-style6'><h4>no data found for the past 24 hours. <br/> Database may be out-of-date</h4></td></tr>") %>
<% end if %>

我观察到的是,无论查询是否返回数据,EOF 和 BOF 都是错误的,否则页面和代码工作正常。我做错了什么?

【问题讨论】:

    标签: sql database asp-classic


    【解决方案1】:

    尝试为您的记录集明确指定参数,看看它是否有任何不同(我猜会的):

    set MyDatabase = server.createobject("ADODB.Connection")
    set myRecordset = server.CreateObject("ADODB.Recordset")
    Mydatabase.open(MySite) 
    myRecordset.Open strSqlMin, myDatabase, adOpenStatic, adLockOptimistic
    if not myRecordset.Eof then
        ...
    else
        ...
    end if
    

    【讨论】:

      【解决方案2】:
      Set objrs = Server.CreateObject ("ADODB.RecordSet")   
      objrs.Open SqlStr, DbConnect, adOpenStatic, adLockOptimistic,adCmdText
      If Objrs.RecordCount <= 0 Then
          Response.Write "Sorry, No Records Found"
      Else
          While Not Objrs.EOF
             Reponse.Write " Writing records and stuff <br>" 
          Objrs.MoveNext
          Wend
      End If
      Objrs.Close
      Set objrs = Nothing
      

      【讨论】:

      • 使用 Objrs.RecordCount
      【解决方案3】:

      我通常采用这种方法并检查 NOT BOF

          Set oDB= Server.CreateObject ("ADODB.Connection")
          oDB.CursorLocation = adOpenStatic
          oDB.Open "Provider=SQLOLEDB;etc etc"
          sql = "SELECT etc etc etc "
          Set rs1 = Server.CreateObject("ADODB.Recordset")
          Call rs1.Open(sql, oDB, adOpenStatic)
          if not rs1.BOF then
              ' This means there's a recordset of results
          end if
      

      【讨论】:

        【解决方案4】:

        Ralpharama 和 ChrisBE ......我尝试了你的两个建议,但都没有成功。自从使用后我不得不修改 ChrisBE

        myRecordset.Open strSqlMin、myDatabase、adOpenStatic、adLockOptimistic

        抛出一个错误,我删除了 adLockOptimistic,因为它似乎不适合仅检索和打印元素。在我删除它之后,你的代码就起作用了。

        不管是否检索到记录,EOF 和 BOF 都是假的。

        我找到了这个引用 (how to count records in ASP classic?),它使用了这种类型的 SQL 字符串

        ' This code checks for no data returned from the last 24 hours  
        <%    strCountSQL = "SELECT COUNT(*) AS NumRecs FROM table2 WHERE (((table2.Date_Time)<Now() And (table2.Date_Time)>Now()-1))"
        set MinRecordset = MyDatabase.Execute(strCountSQL)
        iTotalRecords = MinRecordset.Fields("NumRecs ")
        MinRecordset.Close
        
        if iTotalRecords > 0 then %>                
        ...html code
        <% else  
        response.write("<tr><td class='auto-style6'><h4>no data found for the past 24 hours. <br/> Database may be out-of-date</h4></td></tr>") %>
        end if %>
        

        然后设置一个 if 语句查看 NumRecs 以查看它是否大于 0。

        对于我的代码来说,这就像一个魅力。感谢您的时间.....RDK

        【讨论】:

          猜你喜欢
          • 2011-04-19
          • 1970-01-01
          • 1970-01-01
          • 2016-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-22
          • 2021-06-18
          相关资源
          最近更新 更多