WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Как заставить GetRecordCount() правильно работать?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Как заставить GetRecordCount() правильно работать?
Michaylo_1 опубликован 10-03-2001 21:33 MSK   Click Here to See the Profile for Michaylo_1   Click Here to Email Michaylo_1  
Почему-то в примере, описанном в книге Ю.Тихомиров "SQL Server 2000. Разработка приложений", не работает функция GetRecordCount(). В базе 23 записи, а при запуске приложения с использованием CMFlexGrid показывается только одна, т.к. GetRecordCount()возвращает 1. В чем-то тут хитрость, может кто знает?
DigY опубликован 11-03-2001 10:04 MSK     Click Here to See the Profile for DigY  Click Here to Email DigY     
Надо сначала встать на конец
таблицы записей потом только вызывать этот метод, такая вот тут петрушка
Michaylo_1 опубликован 11-03-2001 16:51 MSK     Click Here to See the Profile for Michaylo_1  Click Here to Email Michaylo_1     
Я сделал, как посоветовали. Поставил указатель перед функцией GetRecordCount() на последнюю запись, но все равно видно только 1.
И, что интересно, если я изменяю размер окна - сразу же видно все записи.
Может кто знает в чем дело?
Michaylo_1 опубликован 12-03-2001 18:10 MSK     Click Here to See the Profile for Michaylo_1  Click Here to Email Michaylo_1     
Может я что-то не так сделал, DigY? Конкретно часть кода выглядит так:

void CPp11View::OnInitialUpdate()
{
...
CString ss;
m_pSet->MoveLast();
int nn=m_pSet->GetRecordCount();
ss.Format("nn= %d",nn);
AfxMessageBox(ss);
...
}

При этом создал обычный проект с подключение базы pubs из стандартной поставки SQL-Server 7. Добавил только выше упомянутые строки.

Выводит nn=1, хотя должно быть nn=23 в моем случае.

В документации к методу GetRecordCount() сказано:

Caution The record count is maintained as a “high water mark” — the highest-numbered record yet seen as the user moves through the records. The total number of records is only known after the user has moved beyond the last record. For performance reasons, the count is not updated when you call MoveLast. To count the records yourself, call MoveNext repeatedly until IsEOF returns nonzero. Adding a record via CRecordset:AddNew and Update increases the count; deleting a record via CRecordset::Delete decreases the count.

Попробовал вставить после MoveLast MoveNext, все равно не помогло. Выводит одну запись, хоть ты тресни :-((((.

Demo_S опубликован 15-03-2001 03:16 MSK     Click Here to See the Profile for Demo_S  Click Here to Email Demo_S     
Ну, я не знаю SQL-server
но в том куске доки, что ты привел вроде ж написано, что MoveLast() не изменяет счетчик Count для увелич производительности, для того чтоб получить реальный count нужно вызывать MoveNext с самого начала пока не будет EOF(конец файла).
То есть, я так понял, вызывай MoveNext() в цикле, пока не будет EOFЮ и не трогай MoveLast().

Если я чет не так понял - извини.

Michaylo_1 опубликован 15-03-2001 18:58 MSK     Click Here to See the Profile for Michaylo_1  Click Here to Email Michaylo_1     
Отлично! :-))))) Все работает, когда делать в такой последовательности:
while(!m_pSet->IsEOF())
m_pSet->MoveNext();
nn=m_pSet->GetRecordCount();

Спасибо!

LamerD опубликован 19-02-2001 17:58 MSK     Click Here to See the Profile for LamerD  Click Here to Email LamerD     
Вот поднял старую тему с тем же вопросом
По моему глупо пролистывать по порядку все записи....а если их у меня по лимон?
Так как же заставить правильно работать?
m опубликован 24-02-2001 07:33 MSK     Click Here to See the Profile for m  Click Here to Email m     
тут нужно базу правильно строить.
делаешь поле например ID, ставишь на него первичный ключ , ставишь ему автоинкремент, что гарантирует разные ID на все строки. а в проге делаешь ласт и читаешь ID у этой строки.
все просто.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.