Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите по ADO  [new]
smylikov
Member

Откуда:
Сообщений: 53
Как мне узнать есть ли в рекордсете записи перед тем как начать их переборку ?
15 май 03, 16:53    [200060]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Если rs - рекордсет, то можно так:

If NOT (rs.BOF AND rs.EOF) Then

...


Еще есть свойство RecordCount, но с ним есть нюанс.
15 май 03, 17:00    [200069]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
DIKI
Member

Откуда: Москва
Сообщений: 178
If Not (rs.EOF AND rs.BOF) then

rs.movefirst
Do while not rs.EOPF
rs.movenext
loop
END if


Если ты про VB:)
15 май 03, 17:01    [200070]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
smylikov
Member

Откуда:
Сообщений: 53
to jimmers А что за нюанс ?
15 май 03, 17:13    [200096]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Не всегда помогает.

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.
15 май 03, 17:24    [200123]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
2 smylikov

Никогда не пользуйся RecordCount (для проверки есть ли записи)

Даже, когда рекодсет поддерживает это свойство, оно может вернуть не правильное значение, а правильное будет пока не пробежишь весь рекодсет полностью (rc.MoveLast), что не есть хорошо.
15 май 03, 17:33    [200144]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
2Senin Viktor

Странно, никогда на замечал. Пример кода можно?
15 май 03, 17:39    [200156]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
>Странно, никогда на замечал. Пример кода можно?

он абсолютно прав. тот же пример на ботающий на w2k не будет работать на XP и наоборот. ненадежно.

SELECT COUNT(*) FROM... работает железно.
15 май 03, 23:40    [200452]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
VIG
Guest
Цитата из книги Роберта Дженингса "Руководство по разработке баз данных на
VB6"
"RecordCount-Возвращает число записей в наборе с возможностью прокрутки ,если набор записей поддерживает возможность позиционирования или закладки (Bookmark).Если такие возможности не поддерживаются ,необходимо использовать метод MoveLast ,чтобы получить точное значение свойства RecordCount Если набор записей с последовательным доступом имеет одну или несколько записей свойством RecordCount возвращается -1. Пустому набору записей любого типа соответствует значение 0"
16 май 03, 01:04    [200491]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
2 jimmers
>Странно, никогда на замечал. Пример кода можно?

Ты указал выдержку из хелпа, там двумя параграфами ниже будет


...
In certain cases, your provider or cursor might be unable to provide the
RecordCount value without first fetching all records from the data source. To force
this type of fetch, call the Recordset MoveLast method before calling RecordCount.
...


К тому же интересный эффект получается в MSAccess при попытки просмотреть РекордКаунт в момент загрузки формы без использования movelast. Сначала возвращается 1 запись, а через некоторое время правильное число записей.
16 май 03, 10:16    [200669]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
2Senin Viktor

Я имею ввиду работу с SQL Server через ADO, т.к. вопрос размещен в форуме Microsoft SQL Server. Так вот, ни разу не замечал (провайдер SQLOLEDB), чтобы RecordCount вернул не то, что на самом деле. Если не затруднит, можно пример для SQL Server, где RecordCount ведет себя “плохо”.
16 май 03, 11:24    [200816]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
2 jimmers

>Я имею ввиду работу с SQL Server через ADO,

А ADO для Access отдельного :)

Слов-то из хелпа не выкинешь: "...might be unable..."
16 май 03, 11:43    [200871]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Понятно, может быть и есть такой глюк на Access - я не работаю с ним, слава богу. :)

В любом случае - BOF & EOF лучший вариант.
16 май 03, 11:49    [200885]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
2 jimmers

>Понятно, может быть и есть такой глюк на Access

Да не. Все-что написано в хелпе к АДО касается всего, в т.ч. и при выборе данных из MS SQL, и не важно каким клиентом. (во свяком случая я (м.б. наивный) в это верю)

>В любом случае - BOF & EOF лучший вариант.

Согласен.
Как я и писал "Никогда не пользуйся RecordCount (для проверки есть ли записи) "
16 май 03, 12:38    [201002]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по ADO  [new]
andsm
Member

Откуда: Москва
Сообщений: 1319
Блог
RecordCount всегда возвращает правильное количество записей в случае отсоединенного рекордсета.
16 май 03, 12:57    [201039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить