n4tm Ответов: 1

Получение неправильного количества записей из базы данных DAO jet


Я пытаюсь изменить какой-то старый устаревший код VB6, который использует базу данных DAO Jet.

Проблема заключается в свойстве RecordCount набора записей.
База данных содержит 17953 записи.

Код делает MoveFirst и MoveLast, которые должны установить RecordCount, но свойство RecordCount возвращает только 17855 (98 коротких)

Затем код загружает все записи 17953 в ListView, поэтому все записи доступны и правильно загружаются в Listview, но даже тогда RecordCount все равно возвращает только 17855 !

Есть ли какой-нибудь другой способ получить RecordCount, чтобы быть правильным?

Что я уже пробовал:

Упрощенный код выглядит примерно так.

Дим ДСИ как Дао.Записей
Set Dsi = Dbs.OpenRecordset(tblMessages, dbOpenTable)
...
Dsi.MoveLast
Dsi.MoveFirst
...
- Простая петля
Делайте это до тех пор, пока Dsi.EOF
(загрузить запись в ListView)
ДСИ.Метод MoveNext
Петля
...

F-ES Sitecore

Если вам нужно получить доступ ко всем записям, то используйте курсор на стороне клиента, чтобы вам не нужно было movedlast\movefirst. Что касается ваших отсутствующих записей, сбросьте идентификаторы или что-то еще в файл\журнал, чтобы определить, какие записи отсутствуют, и посмотреть, можете ли вы увидеть какую-либо общую ссылку.

1 Ответов

Рейтинг:
9

OriginalGriff

Начните с проверки базы данных:

SELECT COUNT(*) FROM MyTable
я скажу вам, сколько там рядов. Используйте Access, чтобы выполнить запрос и посмотреть, что вы получите обратно. На первый взгляд - и без доступа к вашей БД это все, что может быть - вы путаете идентификационный номер с номером строки, и в идентификаторах есть "пробелы", где строки были удалены.

И сделайте одолжение своим пользователям: не просто сбрасывайте 18 000 строк в любой элемент управления дисплеем: это не управленческий номер для людей. Страница его, пусть они ищут его, фильтруют его: но отображение гораздо более 50 строк неразумно, потому что требуется слишком много времени, чтобы найти интересующую вас строку. И это делает ваше приложение медленным. Объедините их, и ваши пользователи возненавидят приложение, и на то есть веские причины.


n4tm

Этот запрос действительно возвращает правильное количество записей, как 17953
RecordCount по-прежнему возвращает 17855

Тем не менее, ваше решение делает свою работу!
Спасибо.

ПС. Я использовал это количество записей только в качестве теста. Пользователь обычно видит только около 100 максимум, обычно меньше.