2013-05-14 138 views
1

我的網站中最簡單的組件之一就是在沒有任何代碼變更的情況下停止了從一天到另一天的工作。Asp-Classic ADODB記錄集丟失記錄

'Connection Declaration as connection 
Set rs = Server.CreateObject ("ADODB.Recordset") 
rs.Open "SELECT * FROM tablename ORDER BY id DESC", connection, 1, 3 
while not rs.EOF 
    'writing some Table from the records in DB 
    'Simplified Code %> 
    <tr><td><%=rs("id")%></td><td><%=rs("description")&></td></tr> 
    <% 
    rs.MoveNext 
Wend 
在我的數據庫

我已經驗證的30個記錄:(非凡數

上面的代碼被執行,當我看到他們的2

這告訴我兩件事情,

第一:表名是正確的,並建立與數據庫的連接
第二:表生成本身是正確的

我也有一個較小的測試系統。樣本數據庫中的完全相同的代碼會生成預期的結果。

不幸的是我有「即時訪問」我的主頁爲「調試目的」

是否有ADODB記錄集丟失記錄的任何已知的錯誤絕不?請記住代碼完全相同,並且工作「無錯誤」。

+1

在查詢結束時,「連接,1,3」的用途是什麼? – Christian 2013-05-14 12:33:36

+0

這不再是查詢,它是連接和遊標的定義。你也可以這樣做:rs.Connection = connection rs.Cursors = 1,3 rs.open(query) – Vogel612 2013-05-14 13:05:53

+0

如果你的代碼使用不同的數據庫,那麼錯誤更可能在數據庫中比asp – John 2013-05-14 19:19:33

回答

1

一些建議。

使用選項如果尚未顯式 - (我沒有看到它在你的代碼中)這將顯示SQL錯誤,所以這可能有所幫助。

檢查您是否還沒有銷燬RS。

此外, 「連接,1,3」 的意思是 '有效連接', 'CursorType的', '鎖定類型'

你的CursorType是 'adOpenKeySet' - 3 'ADOPENSTATIC' 是更好的,除非你特別想要一個密鑰集?嘗試調用打開這種方式來強制默認值(這奇怪的是3和1分別爲!):

RS.Open "SELECT * FROM tablename ORDER BY id DESC",connection 

我也常常寫RS輸出循環是這樣的:

If Not RS.BOF Then 
    ' write table tag HTML 
    Do While Not RS.EOF 
     ' write table row + row data 
     RS.MoveNext 
    Loop 
    ' write end table tag HTML 
Else 
    ' write "RS is empty!" 
End If 

這將使它如果記錄集是空的,則更容易判斷。

+0

感謝您的建議。我正在度假一個月,所以我的同事正在嘗試,發現造成錯誤的環境有一點小差異。只是因爲你想知道,'connection,1,3'是我們的「編碼標準」(我們沒有但是nvm)。最後,在表格內使用的一些丟失的文件夾中發現了錯誤(如果它們在那裏的話,那麼也是如此)。我的同事解決了這個問題,所以我只想接受你的答案 – Vogel612 2013-06-10 10:21:23