Классический ASP-определить, были ли какие-либо записи были возвращены из запроса - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть классическая веб-страница ASP, которая извлекает данные из базы данных и отображает их в виде таблицы HTML.При некоторых обстоятельствах может не быть никаких данных, и я хочу перехватить эту ситуацию и отобразить информационное сообщение.Вот фрагменты моего кода:

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 являются ложными независимо от того, были ли возвращены данные из запроса, в противном случае страница и код работают нормально.Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 23 сентября 2019

Я вообще иду на этот подход и проверяю НЕ БОФ

    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
0 голосов
/ 23 сентября 2019

Ральфарама и КрисБе ... Я испробовал оба ваших предложения безуспешно.Мне пришлось модифицировать ChrisBE с тех пор, как с помощью

myRecordset.Open strSqlMin, myDatabase, adOpenStatic, adLockOptimistic

выдал ошибку, я удалил adLockOptimistic, так как он, похоже, не былподходит только для извлечения и печати элементов.После того как я удалил его, ваши коды заработали.

Независимо от того, в обоих случаях EOF и BOF были ложными, независимо от того, были ли получены записи.

Я нашел эту ссылку ( как считать записи или нет)в 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

0 голосов
/ 23 сентября 2019

Попробуйте явно указать параметры для вашего набора записей и посмотрите, имеет ли это какое-то значение (думаю, так и будет):

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
...