А так не пробовали?
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:
Здравствуйте Аноним, Вы писали:
А>Тото и оно что пробовал. Выдаёт правильно только если пробежать от начала до канца. А>И не правильно ни с разу после открытия, ни после попутки 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.
Здравствуйте 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.
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:
Здравствуйте 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++.
Спасибо всем все советы пригодились, многому научился. :)
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Condor, Вы писали: Z>>>Как узнать сколько записей в CRecordset при выполнении SELECT запроса? C>>А так не пробовал: C>>SELECT COUNT(*) FROM ... ну и так далее...
А>Дык мне надо в текущем CRecordset скока записей, а не в том который был 10 сек назад. А>Похоже я ношел решение, точнее другой драйвер ODBC, а кроме того кучу всячины для А>работы с БД под VC++.
А>Спасибо всем все советы пригодились, многому научился.
Тогда поделитесь с общественностью. А вообще тема много раз обсуждалась. В общих чертах таково ИМХО: получить количество выбранных записей можно, лишь полностью выполнив выборку, т.е. пройдя RecordSet от начала до конца. Т.к. выборка, в общем-то, выполняется последовательно, запись за записью. Если обратить внимание, то на сложных выборках можно заметить, что на получение следующей записи может быть затрачено разное время, отличающееся порой на порядки.
P.S. Экспериментальная база основана на "чистом" ODBC API. Если нужны подробности — поделюсь.
Здравствуйте The Lex, Вы писали:
TL>Тогда поделитесь с общественностью.
Рад бы да тока мне CD подогнали со всячиной для VC++. :shuffle:
Могу список рекламный его выслать.
TL>А вообще тема много раз обсуждалась. В общих чертах таково ИМХО: TL>получить количество выбранных записей можно, лишь полностью выполнив TL>выборку, т.е. пройдя RecordSet от начала до конца. Т.к. выборка, TL>в общем-то, выполняется последовательно, запись за записью. Если TL>обратить внимание, то на сложных выборках можно заметить, что на TL>получение следующей записи может быть затрачено разное время, TL>отличающееся порой на порядки.
Собственно о чёмто подобном я догадывался. Но меня с толку сбивали примеры
на VB в MSDN в которых всё вродибы работало (т.е. кол-во записей сразу
выдавалось), просто невнимательно читал как инициализировались Recordset-ы.
TL>P.S. Экспериментальная база основана на "чистом" ODBC API. TL>Если нужны подробности — поделюсь.
Здравствуйте Аноним, Вы писали:
А>К сожалению драйвер ODBC не поддерживает ничего динамического (dynaset и dynamic), А>а snapshot уже бУкмарки не хочет давать.