ник: osmor
Вы делаете типичную ошибку...
Прежде всего нужно запомнить что форма это ТОЛЬКО ОТОБРАЖЕНИЕ данных, а сами данные находятся в ТАБЛИЦАХ. т.е Если вы хотите работать с данными, то обращайтесь к ним непосредственно, а не к их отображению в форме.
здесь у вас не увидел ничего про рекордсет
Рекодсет это виртуальное представление некого набора данных
или как сказал один очень умный человек
"Рекордсет - узкая прорезь через которую видно 1 строку таблицы, но ее можно гонять по этой таблице вверх-вниз"
И так задача получить поля из всех строка набора записей предсталенного в подчиненной форме для того что бы произвести с ними некие действия.
Набор записей в форме можно получить обратившись к свойству Recordset формы. Как было сказано выше в MDB свойство Recordset формы содержит DAO рекордсет. (нужно подключить библиотеку DAO или вместо dim rst as dao.recordset использовать
dim rst as object
)
т.е.
'описываем переменную для рекордсета
dim rst as dao.recordset
dim lngTemp as Long
' получаем рекордсет который содержит записи подформы
set rst = me.имяКонтролаПодФормы.form.recordset
'проверяем наличие записей в рекордсете
if rst.recordcount <> 0 then
'переходим к первой записи
rst.movefirst
'пока не будет достигнут конец рекордсета, т.е. свойство EOF не станет истиной т.е. TRUE
do while Not rst.eof
' берем значение из полей с именем "Поле1" и "Поле3" (считая что такие поля есть в
наборе данных. НЕ В ФОРМЕ!!!! а в источнике т.е. таблице или запросе которые
являются источником данных) перемножаем их делим на 1.8 и результат сохраняем
во временную переменную, что бы затем приплюсовать данные из следующей строки
lngTemp = lngTemp + (rst![Поле1]*rst![Поле3]/1.8)
'переходим к следующей записи
rst.movenext
loop
'Выводим полученный результат - сумма произведений полей "Поле1" и "Поле3"
деленное на 1.8 для всех полей подформы
msgbox lngTemp
end if
|
Надеюсь на первых порах понятно.. но без чтения документации по DAO (и потом еще и DAO) непрожить.
Если что не понятно - спрашивайте.
ЗЫ. возможны опечатки