Когда когда-либо я пытаюсь получить доступ к свойству RecordCount, я всегда получаю возвращаемое значение-1. Ниже мой пример кода.
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open Application("strConnectstring")
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.ActiveConnection = oConn
SQL = "Publications_PicoSearchListing"
set rs = oConn.execute(SQL)
Я не уверен, делаю ли я forwardCursor или динамические курсоры, или если поставщик даже поддерживает свойство RecordCount. Как я проверяю, поддерживает ли поставщик свойство RecordCount или если я использую или forwardCursor или динамические курсоры.
Любая справка ценилась бы.
Спасибо
] Для пейджинга вы можете использовать []recordset.PageSize[
] и []recordset.AbsolutePage[
], как этот[
Set rs = Server.CreateObject("ADODB.Recordset")
' make recordset use adUSEclient ( client side cursor)'
rs.CursorLocation = 3
' make recordset use the adOpenStatic cursor ( scrollable )'
rs.CursorType = 3
rs.PageSize = RecordsPerPage
rs.Open sql, conn
' go to selected page'
if not rs.EOF and not rs.BOF then
rs.AbsolutePage = page_you_want_to_go
end if
]
[], после чего вы получаете доступ к []recordset.PageCount[
], чтобы узнать количество возвращаемых страниц...[
Обратите внимание: если вы не перейдете в конец набора записей, нет никакой гарантии, что RecordCount будет заполнен. Стандартный образец для итерации над каждой строкой в наборе записей с использованием While Not rs.EOF
. Во всем VBA-коде, который я когда-либо писал, я никогда не полагался на проверку rs.RecordCount
вместо проверки типа курсора, его можно установить. Например:
Set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("northwind.mdb"))
set rs = Server.CreateObject("ADODB.recordset")
sql="SELECT * FROM Customers"
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockBatchOptimistic
rs.Open sql, conn
Если вам нужен только счет, то почему бы не выдать "SELECT Count(*) From Publications_PicoSearchListing"
Of Interest? Понимание типа курсора ADO по умолчанию
Другая альтернатива получения RecordCount - выполнить:
rs.MoveLast
rs.MoveFirst
и затем проверить RecordCount, и даже тогда, кажется, я помню, что некоторые типы курсоров не гарантированы (но память на этом нечёткая).
Также обратите внимание : Не используйте MoveLast/MoveFirst, если только это действительно необходимо: это будет медленно с большим набором записей или набором записей, нарисованным по сети. Вместо этого используйте технику Count(*).
Recordcount не поддерживается с курсором по умолчанию только вперед. вы должны добавить дополнительные параметры к команде open
rs.open sql, conn, 1,1
Это должно позволить вам получить доступ к rs.recordcount.
Но разбиение на страницы лучше всего выполнять с помощью метода Recordset.GetRows () + Recordset.Move ().
http://databases.aspfaq.com/database/how-do-i-page-through-a-recordset.html (прокрутите вниз до выделенного жирным шрифтом «Recordset.GetRows () + Recordset.Move ()», это самый быстрый способ без использования хранимых процедур)