|
|
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
Подскажите! Есть главная форма, в ней подчиненная табл. форма, источником данных которой - хр.проц. на MS SQL. Надо погасить поля, итоговая сумма которых равна 0. В примечании подч. формы вычисляю суммы полей, анализирую их и, если сумма =0, схлопываю. Если после me.SubForm.Form.RecordSource = "" ставлю точку останова и потом схлопываю, то все работает. Если убираю точку останова, схлопываются все поля независимо от суммы. Т.е. суммы не успевают вычислиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2003, 18:21 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
> Если убираю точку останова, схлопываются все поля независимо от суммы. Значит, можно поставить на месте точки останова DoEvents. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2003, 21:50 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
ВС DoEvents было поставлено сразу. Эфекта никакого. Даже если воткнуть MsgBox после me.SubForm.Form.RecordSource = "...", то классный эффект - данные в подчиненной форме выводятся, поверх - сообщение, нажимаю на нем "Ок" - все колонки схлопываются. Т.е. программа считает, что на момент анализа сумм по полям они равны 0. Если же ставишь точку останова, то суммы успевают расчитаться и схлопываются только реально нулевые колонки. Есть на табличной форме красная кнопочка с крестикомЮ которая становится серой, когда RecordSet формы заполнен. Вот это-то событие поймать бы! Но как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2003, 11:46 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
Тогда придется разобраться в сути задачи. Что такое схлопывание полей? А красная кнопочка - это что-то странное. Это что-то стандартное в Аксессе? (Я с Аксессом работаю лет 8, но такую кнопку не знаю. Возможно, это что-то новое в версиях 2002 и выше?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2003, 12:49 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
Есть вариант. Поставить не DoEvents, а что-нибудь вроде Me.SubForm.Form.Recordset.MoveLast тогда программа не пойдет дальше, пока все записи не придут с сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2003, 13:31 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
"Схлопывать" - 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 поставленное перед приведенным фрагментом не помогло. Пришлось пока повесить это безобразие на кнопку на главной форме - получил весь результат, а потом нажми и сверни "нулевые" поля - плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2003, 16:09 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
> кстати у нас в России на "Вы" обращаются к одному человеку, если хотят подчеркнуть уважение к нему :^) Знаю. Я до 25 лет жил в Питере, так что в курсе. Но когда мне говорят "Вы", то я жду продолжения: "Пройдемте, гражданин". По сути вопроса - все понял, но пока идей никаких. Продолжаю думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2003, 17:05 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
В качестве варианта попробуй следующее: 1. Создай в примечании поля еще одно поле с функцией подсчета записей: "=Count(*)" 2. По таймеру читай значение данного поля. Как только значение данного поля перестанет быть равным Null - можеш проверять итоговые суммы в прочих полях и нужные из них "схлопывать". Хотя... Хотя по идее Null (в случае если все записи еще не загружены и результат итоговых функций не определен) и Ноль (в случае когда все записи загружены и итоговая сумма равна 0) - не одно и тоже. То есть, Null не равен 0, поэтому срабатываний не должно было быть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2003, 17:52 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
1 это ADP? (пожоже на это) 2 сколько у тебя записей в подчиненной форме? 3 сколько таких полей у тебя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2003, 19:34 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
Проблема заключается в том, что в ADP выражение form.recordsource="..." выплняется асинхронно и ХП может еще не успеть выполниться,а код VBA пошел дальше. Вариантом решения является rs.open "...",connection, adOpenStatic set form.recordset=rs тогда код будет выполняться последовательно и проблема синхронизации исчезнет. Недостатком такого подхода является невозможность далее получить form.recordsetclone что успешно лечиться form.recordset.clone PS.А 'схлопывание' можно перенести в код подчиненной формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 09:52 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
Саша594! Все сделал как написано, результат прежний - все поля схлопнулись. Но появился странный эфект. Если ставлю точку останова на цикле, слопывающем поля в зависимости от величины суммы поля, выдается ошибка - "Сервер OLE не зарегестрирован". Без точки останова ошибка не выдается, но и результата нет. (On error НЕ Resume next). Наверно это к делу не относится, но все же. По кнопке поля попрежнему прекрасно схлопываются. Правда все это делается пока из главной формы, в подчиненную не перенес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 14:02 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 14:29 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
В процедуре вместо схлопывания запускайте отдельную процедуру с дуевентом в цикле и выходом из него по результатам проверки загрузки (в ADO нет stillexecuting, стало быть надо проверять окончание как-то иначе - например по проверке некоего спецполя. А то константы adErrStillExecuting, adStateExecuting не похожи на требуемые семафорчики. Знатоки ADO меня поправят .:0), а в этой процедуре аккурат и схлопывайте ваши колонки - по выходу из цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 14:52 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
а чё сделать хранимку, чтоб на серваке сумму считала и по результатам дела делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 15:02 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
2Вадя. Ну конечно суммы в хр. пр. посчитать можно. Но заело! Ведь вижу на форме "семафорчик", вот он счет закончился, а как ухватить его как не понимаю. Но все данные советы получаются еще сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 18:12 |
|
||
|
Как определить окончание вычисления RecordSource вподчиненной форме
|
|||
|---|---|---|---|
|
#18+
вместо DoEvents поставь Do Until (me.SubForm.Form.RecordSource.State And &HFFFE) = 0 DoEvents Loop ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 19:47 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32297389&tid=1678759]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 366ms |

| 0 / 0 |
