powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить окончание вычисления RecordSource вподчиненной форме
17 сообщений из 17, страница 1 из 1
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297132
lln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lln
Гость
Подскажите! Есть главная форма, в ней подчиненная табл. форма, источником данных которой - хр.проц. на MS SQL. Надо погасить поля, итоговая сумма которых равна 0. В примечании подч. формы вычисляю суммы полей, анализирую их и, если сумма =0, схлопываю. Если после
me.SubForm.Form.RecordSource = ""
ставлю точку останова и потом схлопываю, то все работает. Если убираю точку останова, схлопываются все поля независимо от суммы. Т.е. суммы не успевают вычислиться?
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297265
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Если убираю точку останова, схлопываются все поля независимо от суммы.

Значит, можно поставить на месте точки останова DoEvents.
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297367
Леонид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВС
DoEvents было поставлено сразу. Эфекта никакого. Даже если воткнуть MsgBox
после me.SubForm.Form.RecordSource = "...", то классный эффект - данные в подчиненной форме выводятся, поверх - сообщение, нажимаю на нем "Ок" - все колонки схлопываются. Т.е. программа считает, что на момент анализа сумм по полям они равны 0. Если же ставишь точку останова, то суммы успевают расчитаться и схлопываются только реально нулевые колонки.
Есть на табличной форме красная кнопочка с крестикомЮ которая становится серой, когда RecordSet формы заполнен. Вот это-то событие поймать бы! Но как?
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297378
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тогда придется разобраться в сути задачи. Что такое схлопывание полей?

А красная кнопочка - это что-то странное. Это что-то стандартное в Аксессе? (Я с Аксессом работаю лет 8, но такую кнопку не знаю. Возможно, это что-то новое в версиях 2002 и выше?)
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297389
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Есть вариант. Поставить не DoEvents, а что-нибудь вроде

Me.SubForm.Form.Recordset.MoveLast

тогда программа не пойдет дальше, пока все записи не придут с сервера.
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297459
lln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lln
Гость
"Схлопывать" -
If (сумма поля) = 0 Then
Me.SubForm.Form(CtlName).ColumnHidden = True
Else
Me.SubForm.Form(CtlName).ColumnHidden = False
end if

Ну, извините! (кстати у нас в России на "Вы" обращаются к одному человеку, если хотят подчеркнуть уважение к нему). Асс2000, даже не 2002. "Красной" назвал кнопку (не знаю как правильно это назвать), которая загорается внизу таблицы (справа от кнопок перехода по записям) пока идет расчет данных формы. Она становится серой, когда расчет закончен. Значит знает Access этот момент! И я хочу.
Me.SubForm.Form.Recordset.MoveLast поставленное перед приведенным фрагментом не помогло.
Пришлось пока повесить это безобразие на кнопку на главной форме - получил весь результат, а потом нажми и сверни "нулевые" поля - плохо.
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297486
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> кстати у нас в России на "Вы" обращаются к одному человеку, если хотят подчеркнуть уважение к нему

:^) Знаю. Я до 25 лет жил в Питере, так что в курсе. Но когда мне говорят "Вы", то я жду продолжения: "Пройдемте, гражданин".

По сути вопроса - все понял, но пока идей никаких. Продолжаю думать.
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297507
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве варианта попробуй следующее:

1. Создай в примечании поля еще одно поле с функцией подсчета записей: "=Count(*)"
2. По таймеру читай значение данного поля. Как только значение данного поля перестанет быть равным Null - можеш проверять итоговые суммы в прочих полях и нужные из них "схлопывать".

Хотя... Хотя по идее Null (в случае если все записи еще не загружены и результат итоговых функций не определен) и Ноль (в случае когда все записи загружены и итоговая сумма равна 0) - не одно и тоже. То есть, Null не равен 0, поэтому срабатываний не должно было быть...
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297544
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 это ADP? (пожоже на это)
2 сколько у тебя записей в подчиненной форме?
3 сколько таких полей у тебя?
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32297979
Саша 594
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема заключается в том, что в ADP выражение

form.recordsource="..."

выплняется асинхронно и ХП может еще не успеть выполниться,а код VBA пошел дальше.

Вариантом решения является

rs.open "...",connection, adOpenStatic

set form.recordset=rs

тогда код будет выполняться последовательно и проблема синхронизации исчезнет. Недостатком такого подхода является невозможность далее получить

form.recordsetclone

что успешно лечиться

form.recordset.clone

PS.А 'схлопывание' можно перенести в код подчиненной формы
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32298388
lln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lln
Гость
Саша594!
Все сделал как написано, результат прежний - все поля схлопнулись.
Но появился странный эфект. Если ставлю точку останова на цикле, слопывающем поля в зависимости от величины суммы поля, выдается ошибка - "Сервер OLE не зарегестрирован". Без точки останова ошибка не выдается, но и результата нет. (On error НЕ Resume next). Наверно это к делу не относится, но все же. По кнопке поля попрежнему прекрасно схлопываются.

Правда все это делается пока из главной формы, в подчиненную не перенес.
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32298437
Саша 594
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IIN:'В примечании подч. формы вычисляю суммы полей, анализирую их и, если сумма =0, схлопываю'

Да есть такая проблема после изменения recordset формы. У меня такое же сообщение об ошибке возникало на операции form.recordset.recordcount.
Дело в том что операция form.recordsource=".." не эквивалентна set form.recordset , она выполняет еще какие-то действия.

Попробуйте убрать поля в примечании ыгиащкь и вычислить суммы вручную. Например:

Function getSumm(f as form) as Currency
dim rs_clone as adodb.recordset
set rs_clone = f.recordset.clone

И далее цикл по rs_clone
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32298498
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В процедуре вместо схлопывания запускайте отдельную процедуру с дуевентом в цикле и выходом из него по результатам проверки загрузки (в ADO нет stillexecuting, стало быть надо проверять окончание как-то иначе - например по проверке некоего спецполя. А то константы adErrStillExecuting, adStateExecuting не похожи на требуемые семафорчики. Знатоки ADO меня поправят .:0), а в этой процедуре аккурат и схлопывайте ваши колонки - по выходу из цикла.
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32298529
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чё сделать хранимку, чтоб на серваке сумму считала и по результатам дела делать?
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32298951
lln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lln
Гость
2Вадя.
Ну конечно суммы в хр. пр. посчитать можно. Но заело! Ведь вижу на форме "семафорчик", вот он счет закончился, а как ухватить его как не понимаю.
Но все данные советы получаются еще сложнее.
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32299058
x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
x
Гость
вместо

DoEvents

поставь

Do Until (me.SubForm.Form.RecordSource.State And &HFFFE) = 0
DoEvents
Loop
...
Рейтинг: 0 / 0
Как определить окончание вычисления RecordSource вподчиненной форме
    #32299061
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Возможно, не RecordSource, а RecordSet???
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить окончание вычисления RecordSource вподчиненной форме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]