2013-08-02 85 views
0

我已經編寫了一個基本的asp經典類,用於處理與我們數據庫的所有連接。 什麼時候調用一切正常,但第一次,但第二次被稱爲記錄集不打開任何想法?無法打開記錄集

Class SQLConnection 
Private Sub Class_Initialize 
    set ConnectionObject = Server.CreateObject("ADODB.Connection") 
    Set RecordsetObject = Server.CreateObject("ADODB.Recordset") 
End Sub 
Private Sub Class_Terminate 
    Set ConnectionObject = Nothing 
    Set RecordsetObject = Nothing 
End Sub 

Public Default Property Get Item(sString) 
     On Error Resume Next 
      Item = RecordsetObject(sString) 
     On Error GoTo 0 
If Err.Number <> 0 then 
     Item = null 
    End if 
End Property 

Public Sub MoveNext 
    If Not RecordsetObject.EOF Then RecordsetObject.MoveNext 
End Sub 

Public Function EOF 
    EOF = RecordsetObject.EOF 
End Function 

Public Sub Open(SQLStr,ConnStr) 
    ConnectionObject.Open ConnStr 
    RecordsetObject.Open SQLStr, ConnectionObject, 3 
End Sub 

Public Sub Close 
    RecordsetObject.Close 
    ConnectionObject.Close 
End Sub 

End Class 


Set SQLConn = New SQLConnection 
SQLConn.Open "SELECT top 10 id FROM tblProfileVillages", ConnectionString 
Do While Not SQLConn.EOF 
    Response.write(SQLConn("id")) 
    SQLConn.MoveNext 
Loop 
SQLConn.Close 
Set SQLConn = nothing 

回答

0

事實證明,如果你的sql語句不能在網格中顯示,那麼對象就像插入語句那樣立即關閉。

我通過檢查對象是與運行代碼之前開放解決了這個If RecordsetObject.State = 1 then

1

我認爲錯誤是在Item財產,你將不得不調用on error goto 0前檢查err.Number

使用方法如下:

Public Default Property Get Item(sString) 
    On Error Resume Next 
    Item = RecordsetObject(sString) 
    If Err.Number <> 0 then 
     Item = null 
    End if 
    On Error GoTo 0 
End Property 

而且我還沒有在VBScript看到 「空」 了。這是你所做的一個常數,還是可能是因爲你在某個地方錯過了一個錯誤? on error goto next業務有時可能很煩人。 :)

+2

'Null'是公認的VBScript關鍵字 – AnonJr

+0

感謝您 但這並沒有解決在錯誤轉到next'錯誤 '是不幸的,因爲如果你解析一個不存在的列名並且'isObject'和其他內建的函數不能處理'recordset'對象,那麼'recordset'會拋出一個錯誤 –

+0

@AnonJr:有趣的我永遠不需要在所有這些年與VbScript合作的'null',我用vbNull。 @Thomas:這很明顯,但有時我掩蓋了「未定義的變量」錯誤,我沒有想到它。 – gpinkas