Чудеса !? Помогите разобраться !

abms
Дата: 21.12.2011 10:21:58
Возникла проблема. Не понимаю что происходит.

Для наглядности выдернул все в приложенный файл.
В нем есть запрос TestQuery. При запуске он возвращает 5 записей. Если изменить условие отбора с 2050 на 2059 то вернется 3 записи.

Такой же запрос в VBA формирует два рекордсета с параметрами 2050 и 2059.
Но, Recordcount показыввает, что в них уже 5 и 4 записей соответственно.
А в реальности в рекордсех оказывается только по одной записи. При переходе к следующей наступает EOF.

В чем подвох? Как избавиться?
alvk
Дата: 21.12.2011 10:34:27
abms,

вот не глядя на архив спрошу: вы в рекордсетах movefirst делали?
abms
Дата: 21.12.2011 10:38:57
alvk,

пробовал, не помогает.
alvk
Дата: 21.12.2011 10:48:16
abms,

я не "счастливый обладатель модного акцесса"
mds_world
Дата: 21.12.2011 11:00:49
alvk
abms,

вот не глядя на архив спрошу: вы в рекордсетах movefirst делали?

+1

На самом деле, перед выполнением цикла, не хватает movefirst. В подпрограмме определения числа записей RecCount, последняя команда rst.Movelast. И рекордсет там, в конце, и остается.
abms
Дата: 21.12.2011 13:59:45
Никакое перемещение по рекордсету не меняет количества записей. Это уже перепробовано.
sdku
Дата: 21.12.2011 14:56:54
abms
..Такой же запрос в VBA формирует два рекордсета с параметрами 2050 и 2059...
это Вы о чем-в приложенном файле Rst не наблюдается
sdku
Дата: 21.12.2011 14:58:51
прошу прощения в папке загрузки было много баз-глянул не ту
Joss
Дата: 21.12.2011 15:41:39
abms
Никакое перемещение по рекордсету не меняет количества записей. Это уже перепробовано.
Учите матчасть. Перемещение по рекордсету количество записей конечно не изменяет. Но может изменить значение параметра RecordCount,
Особенности использования рекордсетов DAO и ADO
В DAO рекордсете, чтобы узнать ревльное количество записей, надр выполнить команду MoveLast. Т.к. если нет записей, параметр RecordCount выдаёт значение 0. Если есть записи - значение 1 вне зависимости от количества записей. Чтобы получить реальное количество записей, надо выполнить команду MoveLast.. Чтобы потом вернуться к первой записи надо выполнить команду MoveFirst.

Для ADO рекордсета иначе. Там параметр RecordCount, сразу даёт реальное значение.
abms
Дата: 21.12.2011 15:56:15
в программе именно так и организовано.
Однако это не мешает аксесу показывать только одну запись из пяти.