Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.
Почему-то в примере, описанном в книге Ю.Тихомиров "SQL Server 2000. Разработка приложений", не работает функция GetRecordCount(). В базе 23 записи, а при запуске приложения с использованием CMFlexGrid показывается только одна, т.к. GetRecordCount()возвращает 1. В чем-то тут хитрость, может кто знает?
Надо сначала встать на конец
таблицы записей потом только вызывать этот метод, такая вот тут петрушка
Я сделал, как посоветовали. Поставил указатель перед функцией GetRecordCount() на последнюю запись, но все равно видно только 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, все равно не помогло. Выводит одну запись, хоть ты тресни :-((((.


Ну, я не знаю SQL-server
но в том куске доки, что ты привел вроде ж написано, что MoveLast() не изменяет счетчик Count для увелич производительности, для того чтоб получить реальный count нужно вызывать MoveNext с самого начала пока не будет EOF(конец файла).
То есть, я так понял, вызывай MoveNext() в цикле, пока не будет EOFЮ и не трогай MoveLast().

Если я чет не так понял - извини.
Отлично! :-))))) Все работает, когда делать в такой последовательности:
while(!m_pSet->IsEOF())
m_pSet->MoveNext();
nn=m_pSet->GetRecordCount();

Спасибо!
Вот поднял старую тему с тем же вопросом
По моему глупо пролистывать по порядку все записи....а если их у меня по лимон?
Так как же заставить правильно работать?
тут нужно базу правильно строить.
делаешь поле например ID, ставишь на него первичный ключ , ставишь ему автоинкремент, что гарантирует разные ID на все строки. а в проге делаешь ласт и читаешь ID у этой строки.
все просто.

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS