Как узнать сколько записей в CRecordset?
От: Zugr Украина  
Дата: 08.01.02 08:48
Оценка:
Как узнать сколько записей в CRecordset при выполнении SELECT запроса?
Re: Как узнать сколько записей в CRecordset?
От: qbe451 http://www.sva.ru/programms
Дата: 08.01.02 09:37
Оценка:
Здравствуйте Zugr, Вы писали:

Z>Как узнать сколько записей в CRecordset при выполнении SELECT запроса?


проще всего в цикле посчитать
Re[2]: Как узнать сколько записей в CRecordset?
От: Zugr Украина  
Дата: 08.01.02 09:58
Оценка:
Здравствуйте qbe451, Вы писали:

Q>проще всего в цикле посчитать


А быстрее можно?
Re[3]: Как узнать сколько записей в CRecordset?
От: VD Россия  
Дата: 08.01.02 10:29
Оценка:
Здравствуйте Zugr, Вы писали:

Z>А быстрее можно?


А так не пробовали?
CRecordset::GetRecordCount() — Returns the number of records in the recordset.
Re[4]: Как узнать сколько записей в CRecordset?
От: Аноним  
Дата: 08.01.02 10:46
Оценка:
Здравствуйте VD, Вы писали:

Z>>А быстрее можно?

VD>А так не пробовали?
VD>CRecordset::GetRecordCount() — Returns the number of records in the recordset.

Тото и оно что пробовал. Выдаёт правильно только если пробежать от начала до канца.
И не правильно ни с разу после открытия, ни после попутки Skip-нутся сразу в конец,
Т.е. тока по 1 до конца, а это много и долго :crash:
Re[5]: Как узнать сколько записей в CRecordset?
От: Merle Австрия http://rsdn.ru
Дата: 08.01.02 11:45
Оценка:
Здравствуйте Аноним, Вы писали:

А>Тото и оно что пробовал. Выдаёт правильно только если пробежать от начала до канца.

А>И не правильно ни с разу после открытия, ни после попутки Skip-нутся сразу в конец,
А>Т.е. тока по 1 до конца, а это много и долго
Свойство RecordCount не для всех курсоров работает:

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.
Мы уже победили, просто это еще не так заметно...
Re[6]: Как узнать сколько записей в CRecordset?
От: Zugr Украина  
Дата: 08.01.02 12:06
Оценка:
Здравствуйте Merle, Вы писали:

M>Здравствуйте Аноним

Извините забыл имя вписать.

M>The cursor type of the Recordset object affects whether the number of records can be M>determined. The RecordCount property will return -1 for a forward-only cursor; the actual M>count for a static or keyset cursor; and either -1 or the actual count for a dynamic cursor, M>depending on the data source.


А как изменить тип курсора?
Re[7]: Как узнать сколько записей в CRecordset?
От: Merle Австрия http://rsdn.ru
Дата: 08.01.02 14:25
Оценка:
Здравствуйте Zugr, Вы писали:


Z>А как изменить тип курсора?

При открытии рекордсета, понятное дело... Судя по всему ты пользуешься методом .Execute от connection для получения рекордсета, в этом случае курсор создается по умолчанию, а по умолчанию он ForwardOnly, что тебя никоим образом не устраивает.
Надо сначало создать рекордсет, а потом пользовать изо всех сил его метод .Open
Мы уже победили, просто это еще не так заметно...
Re[8]: Как узнать сколько записей в CRecordset?
От: Аноним  
Дата: 09.01.02 11:14
Оценка:
Здравствуйте Merle, Вы писали:

Z>>А как изменить тип курсора?

M>При открытии рекордсета, понятное дело... Судя по всему ты
M>пользуешься методом .Execute от connection для получения рекордсета,
M>в этом случае курсор создается по умолчанию, а по умолчанию он
M>ForwardOnly, что тебя никоим образом не устраивает.
M>
M>Надо сначало создать рекордсет, а потом пользовать изо всех сил
M>его метод .Open

К сожалению драйвер ODBC не поддерживает ничего динамического (dynaset и dynamic),
а snapshot уже бУкмарки не хочет давать.

Ничего не приходит в голову кроме заморочки с потоками, или классом менеджером
записей, который при незанятости в своём потоке бежит по 1й записи до конца, а
при запросах быстренько возвращается будто-бы никто ни куда не ходил. Но этоже
как изгольнуться надо-то. ЫЫЫ. :crash:
Re: Как узнать сколько записей в CRecordset?
От: Condor  
Дата: 09.01.02 13:40
Оценка:
Здравствуйте Zugr, Вы писали:

Z>Как узнать сколько записей в CRecordset при выполнении SELECT запроса?


А так не пробовал:

SELECT COUNT(*) FROM ... ну и так далее...
Re[2]: Как узнать сколько записей в CRecordset?
От: Аноним  
Дата: 09.01.02 13:55
Оценка:
Здравствуйте Condor, Вы писали:

Z>>Как узнать сколько записей в CRecordset при выполнении SELECT запроса?


C>А так не пробовал:


C>SELECT COUNT(*) FROM ... ну и так далее...


Дык мне надо в текущем CRecordset скока записей, а не в том который был 10 сек назад.
Похоже я ношел решение, точнее другой драйвер ODBC, а кроме того кучу всячины для
работы с БД под VC++.

Спасибо всем все советы пригодились, многому научился. :)
Re[3]: Как узнать сколько записей в CRecordset?
От: The Lex Украина  
Дата: 09.01.02 18:41
Оценка:
Здравствуйте Аноним, Вы писали:

А>Здравствуйте Condor, Вы писали:

Z>>>Как узнать сколько записей в CRecordset при выполнении SELECT запроса?
C>>А так не пробовал:
C>>SELECT COUNT(*) FROM ... ну и так далее...

А>Дык мне надо в текущем CRecordset скока записей, а не в том который был 10 сек назад.

А>Похоже я ношел решение, точнее другой драйвер ODBC, а кроме того кучу всячины для
А>работы с БД под VC++.

А>Спасибо всем все советы пригодились, многому научился.


Тогда поделитесь с общественностью. А вообще тема много раз обсуждалась. В общих чертах таково ИМХО: получить количество выбранных записей можно, лишь полностью выполнив выборку, т.е. пройдя RecordSet от начала до конца. Т.к. выборка, в общем-то, выполняется последовательно, запись за записью. Если обратить внимание, то на сложных выборках можно заметить, что на получение следующей записи может быть затрачено разное время, отличающееся порой на порядки.

P.S. Экспериментальная база основана на "чистом" ODBC API. Если нужны подробности — поделюсь.
Голь на выдумку хитра, однако...
Re[4]: Как узнать сколько записей в CRecordset?
От: Zugr Украина  
Дата: 09.01.02 19:06
Оценка:
Здравствуйте The Lex, Вы писали:

TL>Тогда поделитесь с общественностью.


Рад бы да тока мне CD подогнали со всячиной для VC++. :shuffle:
Могу список рекламный его выслать.

TL>А вообще тема много раз обсуждалась. В общих чертах таково ИМХО:

TL>получить количество выбранных записей можно, лишь полностью выполнив
TL>выборку, т.е. пройдя RecordSet от начала до конца. Т.к. выборка,
TL>в общем-то, выполняется последовательно, запись за записью. Если
TL>обратить внимание, то на сложных выборках можно заметить, что на
TL>получение следующей записи может быть затрачено разное время,
TL>отличающееся порой на порядки.

Собственно о чёмто подобном я догадывался. Но меня с толку сбивали примеры
на VB в MSDN в которых всё вродибы работало (т.е. кол-во записей сразу
выдавалось), просто невнимательно читал как инициализировались Recordset-ы.

TL>P.S. Экспериментальная база основана на "чистом" ODBC API.

TL>Если нужны подробности — поделюсь.

Поделись на досуге почитаю. :)
Re[9]: Как узнать сколько записей в CRecordset?
От: Merle Австрия http://rsdn.ru
Дата: 10.01.02 08:20
Оценка:
Здравствуйте Аноним, Вы писали:

А>К сожалению драйвер ODBC не поддерживает ничего динамического (dynaset и dynamic),

А>а snapshot уже бУкмарки не хочет давать.

А работать через ADO?
Мы уже победили, просто это еще не так заметно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.