ADO.RecordCount равняется - 1 проблема

Когда когда-либо я пытаюсь получить доступ к свойству 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 или динамические курсоры.

Любая справка ценилась бы.

Спасибо

7
задан Mitch Wheat 8 January 2010 в 01:40
поделиться

3 ответа

[

] Для пейджинга вы можете использовать []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[], чтобы узнать количество возвращаемых страниц...[

].
3
ответ дан 7 December 2019 в 01:22
поделиться

Обратите внимание: если вы не перейдете в конец набора записей, нет никакой гарантии, что 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(*).

3
ответ дан 7 December 2019 в 01:22
поделиться

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 ()», это самый быстрый способ без использования хранимых процедур)

4
ответ дан 7 December 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: