RecordSet判斷是否有資料的觀念

摘要:RecordSet判斷是否有資料的觀念

常看到許多網友,在使用Recordset的時候,會出現這樣的錯誤
ADODB.Recordset (0x800A0BCD)
可能是 BOF 或 EOF 的值為 True,或目前的資料錄已被刪除。所要求的操作需要目前的資料錄。

或者有加了判斷是否有值,可是卻只是下了以下的判斷式
If Not rs.EOF Then
.....

其實RecordSet撈取資料後,狀態類似一個陣列
並且在陣列的最上方有個BOF以及最下方有個EOF

當rs有值的時候
rs是這樣的
==============================
rs.BOF
-----------------------------
第1筆
第2筆
第3筆
第4筆
第5筆
....
最後一筆
-------------------------------
rs.EOF
===============================
所以當rs.MoveLast之後
如果再執行rs.MoveNext
就會focus在rs.EOF
同理..rs.BOF也是在第1筆之前

所以當rs沒有資料的時候
會是以下這樣
===========================================================
rs.BOF rs.EOF
===========================================================
也就是focus會在rs.BOF 與rs.EOF同時成立的地方
因此
如果要判斷rs沒有資料
應該下以下的語法
 

If rs.BOF And rs.EOF Then
   'rs沒有資料處理
Else
   'rs有值的處理
End If

相關的寫法小喵整理如下:

Set Conn=Server.CreateObject("Adodb.Connection")
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/abc.mdb") & ";Persist Security Info=False"

Set rs=Server.CreateObject("Adodb.RecordSet")
With rs
        .CursorLocation = 2
        .CursorType = 3
        .LockType = 3
        .ActiveConnection = Conn
End With
  
sql="SELECT * FROM TBL1"
rs.Open sql
If Not(rs.BOF And rs.EOF) Then
  rs.MoveFirst
  For y = 1 to rs.RecordCount
   '有資料的相關處理
   rs.MoveNext
  Next
Else
  Response.Write("無資料!!")
  
End If
 


 

 

希望對大家有幫助
^_^


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat