2013-02-18 55 views
3

當我通過MS Access執行SQL查詢時我得到的結果被返回,但是如果我在VBScript中執行相同的查詢,我的RecordCount爲-1​​。我無法分辨這是否是連接錯誤。我沒有得到任何東西,但很明顯,SQL確實在Access中返回結果。我在下面的連接代碼中獲得0次點擊。在MS Access中獲取SQL查詢結果但不在VBScript中

sqlquery = "SELECT * FROM i2cner WHERE Authors Like 'Ish*';" 
dim conn 
set conn=Server.CreateObject("ADODB.Connection") 
conn.Provider="Microsoft.Jet.OLEDB.4.0" 
conn.Open "d:/inetpub/ga/sarina/i2cner/contacts2000.mdb" 
set r = Server.CreateObject("ADODB.recordset") 
if r.state = 1 then r.close 
r.Open sqlquery, conn 
hits = r.RecordCount 
session("hits") = hits 
set session("r") = r 

回答

1
r.CursorLocation = 3 'adUseClient. Thanks @HansUp 

在使用r.Open之前添加上述行。
CursorLocationadUseServer。因此,記錄會隨着您的進展而提取(類似於.net datareader)。將其更改爲adUseClient將帶來客戶端的所有記錄,這將提供正確的RecordCount

編輯:此外,將會話記錄集中存儲沒有意義。而且,你應該關閉連接,一旦你用它做 -

conn.Close set conn = Nothing

什麼是存儲記錄在會議的需要?

+0

@HansUp:非常感謝,會編輯代碼。 – shahkalpesh 2013-02-18 07:16:40

1

如果你只需要記錄計數的數量,那麼你可以給

sqlquery = "SELECT COUNT(*) AS cnt FROM i2cner WHERE Authors LIKE 'Ish%'" 

注意,沒有在SQL字符串中沒有;。 當你需要檢索數量,你可以有

hits = r.fields("cnt") 

OR

hits = r("cnt") 

Recordcount有時是騙人的,所以我沒有太多使用它。我每次都使用上述方法。

+0

是的。對。我不知道這個關於MS Access。相應地編輯答案。 – Rachcha 2013-02-18 11:14:16