Автор
|
Тема: Как заставить GetRecordCount() правильно работать?
|
Michaylo_1 |
опубликован 10-03-2001 21:33 MSK
Почему-то в примере, описанном в книге Ю.Тихомиров "SQL Server 2000. Разработка приложений", не работает функция GetRecordCount(). В базе 23 записи, а при запуске приложения с использованием CMFlexGrid показывается только одна, т.к. GetRecordCount()возвращает 1. В чем-то тут хитрость, может кто знает?
|
DigY
|
опубликован 11-03-2001 10:04 MSK
Надо сначала встать на конец таблицы записей потом только вызывать этот метод, такая вот тут петрушка |
Michaylo_1
|
опубликован 11-03-2001 16:51 MSK
Я сделал, как посоветовали. Поставил указатель перед функцией GetRecordCount() на последнюю запись, но все равно видно только 1. И, что интересно, если я изменяю размер окна - сразу же видно все записи. Может кто знает в чем дело? |
Michaylo_1
|
опубликован 12-03-2001 18:10 MSK
Может я что-то не так сделал, 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
Ну, я не знаю SQL-server но в том куске доки, что ты привел вроде ж написано, что MoveLast() не изменяет счетчик Count для увелич производительности, для того чтоб получить реальный count нужно вызывать MoveNext с самого начала пока не будет EOF(конец файла). То есть, я так понял, вызывай MoveNext() в цикле, пока не будет EOFЮ и не трогай MoveLast().Если я чет не так понял - извини. |
Michaylo_1
|
опубликован 15-03-2001 18:58 MSK
Отлично! :-))))) Все работает, когда делать в такой последовательности: while(!m_pSet->IsEOF()) m_pSet->MoveNext(); nn=m_pSet->GetRecordCount();Спасибо! |
LamerD
|
опубликован 19-02-2001 17:58 MSK
Вот поднял старую тему с тем же вопросом По моему глупо пролистывать по порядку все записи....а если их у меня по лимон? Так как же заставить правильно работать? |
m
|
опубликован 24-02-2001 07:33 MSK
тут нужно базу правильно строить. делаешь поле например ID, ставишь на него первичный ключ , ставишь ему автоинкремент, что гарантирует разные ID на все строки. а в проге делаешь ласт и читаешь ID у этой строки. все просто. |