2011-08-24 82 views

回答

0

ADOQuery,SQL =「select count(*)from mytable where xyz」?

rs.RecordCount?

i = 0 
while not rs.eof 
    i = i + 1 
    rs.next? 
1
Dim oRS as new ADODB.Recordset 
dim recordCount as Long 

oRS.Open "Select * FROM [tablename]", myConnection, adOpenStatic, adLockReadOnly 
If Not oRS.EOF Then recordCount = oRS.RecordCount 

這裏的關鍵是adOpenStatic。它允許.RecordCount獲取記錄集中記錄的實際數量。

當然,如果你是後是如何在一個表中多條記錄:

Dim oRS as new ADODB.Recordset 
dim recordCount as Long 

oRS.Open "Select Count(*) FROM [tablename]", myConnection, adOpenForwardOnly, adLockReadOnly 
If Not oRS.EOF Then recordCount = oRS(0).Value 
+1

我覺得你對'CursorType'值有些困惑。使用'adOpenStatic'時,'RecordCount'屬性也應該有一個有意義的值(而不是'-1')。對於數據源的同步(即時)更新,需要'adOpenDynamic',當規範說「只是記錄的總數」(加上你正在使用一個只讀鎖!)時,可能不是一個要求。並非所有的OLE DB提供者無論如何支持它,例如MS Access沒有。對於你的第一個例子'adOpenStatic'就足夠了。對於第二個示例,您可以使用「更便宜」的「adOpenForwardOnly」。 – onedaywhen

+0

@onedaywhen:謝謝。其實我並沒有困惑。沒有智能感知的好處,記住/輸入這些東西就更難了;) –