Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ASP. RS.RecordCount всегда -1 :(  (Прочитано 10276 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 22-06-2005 05:21 » 

Собсно САБЖ Улыбаюсь Я в АСП не силён, а потому и понять не могу в чём проблема Жаль
Код:
set con=Server.CreateObject("Adodb.Connection")
set rs=Server.CreateObject("Adodb.Recordset")
con.ConnectionString=ConnectionString
con.CursorLocation=1
con.Open
set RS.ActiveConnection=con
RS.CursorType=adOpenStatic
RS.open SQL,con,1,3
counter = 0
do while not RS.Eof
counter = counter + 1
RS.MoveNext
loop
n=RS.RecordCount
Response.write("Total images  : " + cstr(n))
Response.write("<br />Counter : " + cstr(counter))

RS.close
В итоге всегда получаю из RS.RecordCount -1, а counter показывает нормально число записей. Что я не так делаю ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Alf
Гость
« Ответ #1 : 22-06-2005 06:03 » 

MOPO3, это у тебя не с ASP непонятки, а скорее с ADO, потому как RecordCount - это свойство объекта Recordset.

Вот что по этому поводу говорит MSDN:

Цитата
Use the RecordCount property to find out how many records are in a Recordset object. The property returns -1 when ADO cannot determine the number of records or if the provider or cursor type does not support RecordCount. Reading the RecordCount property on a closed Recordset causes an error.
...
The cursor type of the Recordset object affects whether the number of records can be determined. The RecordCount property will return -1 for a forward-only cursor; the actual count for a static or keyset cursor; and either -1 or the actual count for a dynamic cursor, depending on the data source.

Насколько мне помнится из личной практики, это необходимое, но не достаточное условие. Кажется, правильное значение получается лишь в том случае, когда курсор создается на стороне клиента. По умолчанию обычно создается на сервере. Если есть возможность, погляди,где курсор создался в твоем случае.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #2 : 22-06-2005 07:31 » 

Странно, вроде все типы курсоров попробовал и ни один не сработал.
Код:
RS.CursorType=adOpenStatic

RS.CursorType=adOpenForwardOnly

RS.CursorType=adOpenDynamic

RS.CursorType=adOpenKeyset

А насчёт проверки того где создаётся, как это можно посмотреть ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Alf
Гость
« Ответ #3 : 22-06-2005 07:52 » 

Цитата
CursorLocation Property
Indicates the location of the cursor service.

Settings And Return Values
Sets or returns a Long value that can be set to one of the CursorLocationEnum values.

Remarks
This property allows you to choose between various cursor libraries accessible to the provider. Usually, you can choose between using a client-side cursor library or one that is located on the server.

This property setting affects connections established only after the property has been set. Changing the CursorLocation property has no effect on existing connections.

Цитата
CursorLocationEnum
Specifies the location of the cursor service.

Constant Value Description
adUseClient 3 Uses client-side cursors supplied by a local cursor library. Local cursor services often will allow many features that driver-supplied cursors may not, so using this setting may provide an advantage with respect to features that will be enabled. For backward compatibility, the synonym adUseClientBatch is also supported.
adUseNone 1 Does not use cursor services. (This constant is obsolete and appears solely for the sake of backward compatibility.)
adUseServer 2 Default. Uses data-provider or driver-supplied cursors. These cursors are sometimes very flexible and allow for additional sensitivity to changes others make to the data source. However, some features of the Microsoft Cursor Service for OLE DB (such as disassociated Recordset objects) cannot be simulated with server-side cursors and these features will be unavailable with this setting.

Распечатай значение свойства CursorLocation. А еще лучше - попробуй установить его в значение adUseClient и повтори эксперимент. Само собой, постарайся установить значение пораньше, перед открытием соединения, как рекомендует MSDN.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #4 : 22-06-2005 08:04 » 

Alf, спасибки Улыбаюсь Ты как всегда прав Улыбаюсь Хватило изменить одну цифру и всё Улыбаюсь
Вместо con.CursorLocation=1 'Server (adUseNone)
Написал con.CursorLocation=3 'Client (adUseClient)
« Последнее редактирование: 20-12-2007 19:46 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Alf
Гость
« Ответ #5 : 22-06-2005 08:12 » 

Так чего, заработало-таки?
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #6 : 22-06-2005 08:26 » 

Ага Улыбаюсь Заработало Улыбаюсь Просто вместо CursorLocation=1 надо было написать CursorLocation=3 Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines