powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
16 сообщений из 16, страница 1 из 1
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322467
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Войнушки продолжаются.
Есть форма Form1 с Recordset = "SELECT TOP 1 department.* FROM department WHERE (department.id = 3)"
Есть подчинённая форма Form2 с Recordset = "SELECT TOP 1 address.* FROM address WHERE (address.department_id = 3) AND (address.addressType_id = 1)"

При выполнении Form1.Refresh форма Form2 переходит в какое-то аномальное состояние, в котором:
а) доступ к любому полю через Form1.Recordset.Fields завершается ошибкой 3021 "Текущая тапись отстутствует"
б) доступ к любому полю через форму (например, Form.id, где "id" - имя поля) осуществляется нормально
в) форма нормально отображает данные, данные на форме можно вводить и изменять (в ходе изменения данных на форме Form2 её аномальное состояние сохраняется)


Вот лог из IW:
автор?form2.RecordSet.RecordCount
1
?form2.CurrentRecord
1
?form2.RecordSet.Fields.Count
67
?form2.RecordSet.Fields(0).Name
id
?form2.RecordSet.Fields("id").Name
id
?form2.RecordSet.Fields("id")
ошибка 3021 "Текущая тапись отстутствует"
?form2.id
3 //ошибки нет
?form2.RecordSet.EOF
False
?form2.RecordSet.BOF
False

?form1.RecordSource
SELECT TOP 1 department.* FROM department WHERE (department.id = 3)
?form2.RecordSource
SELECT TOP 1 address.* FROM address WHERE (address.department_id = 3) AND (addressType_id = 1)

Вот аналогичная проблема с другого форума ("решена" с помощью заплатки):
http://www.cyberforum.ru/vba/thread511413.html
авторЕсть две формы, главная и подчинённая (табличная с источником данных = запрос)
При обновлении главной формы, естественно, обновляется и подчинённая, и у подчинённой вызывается событие Текущая запись, в котором я вывожу значения текущей записи из подчинённой формы в поля ввода главной формы, что-то в роде:

Код: vbnet
1.
Me.Parent.[Имя поля] = Me.Recordset("[Название столбца]")



В событии Текущая запись сбивается Recordset подчинённоё формы
И выдаёт ошибку что текущая запись не установлена.

Как обновить подчинённую форму (происходит добавление записи - хочу вывести вновь введённую запись) и сделать новую запись текущей???

>>Скорее всего, нужно отказаться от использования свойств «Подчиненные поля» (LinkChildFields) и «Основные
>>поля» (LinkMasterFields) и проводить обновления самостоятельно и последовательно во времени.


Я не использую поля: «Подчиненные поля», «Основные поля».

У меня есть форма без источника данных, т.е. не с чем не связанная.
На ней есть поля ввода, для заполнения таблицы.
На этой же форме я вывожу др. форму (подчинённую) в виде таблицы, по факту она ни чему не "подчиняется" она только размещается на главной форме.

Оговорка: Правильнее сказать, что Recordset не сбивается, а в момент обновления подчинённой формы нет выбранной записи, т.е. ни какая запись из таблицы не является текущей. Хотя событие «Текущая запись» вызывается, но Recordset в данные момент ни на что не ссылается.
Свойство Recordset.Fields(i).Name - связанно со столбцом таблицы,
а Recordset.Fields(i).Value - (что-то вроде) "Отсутствует текущая запись".

-------------------------------------------------------------------------------------------------------------
Решил проблему тем, что обновляю именно Recordset подчинённой формы
Код: vbnet
1.
Me.subForm.Form.Recordset.Requery


При этом не вызывается событие «Текущая запись»
И при вставке делаю только что вставленную записи текущей
Код: vbnet
1.
Me.subForm.Form.Recordset.FindLast ("id = " & id_Только_что_вставленной_записи)



Вопросы:
1. Что это за состояние такое у формы Form2 ?
2. Почему форма переходит в это состояние
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322491
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02,
Эта ошибка и у меня выскакивала, когда в подчиненной форме отсутствовала запись. То есть значений никаких не было. У вас скорее всего при открытии главной формы, первая запись на главной форме не содержит никаких записей в подчиненной. Я решил эту проблему навесив на событие текущая запись процедуру проверки количества строк в подчиненной таблице. Если количество записей в подчиненной таблице по критерию текущей записи в главной таблице форме равно 0, то у меня вообще в подчиненной ничего не выводилось. То есть сначала нужна проверка, а потом только вешать вашу процедуру связывания. Серьезная проблемка кстати. Вы наверное unbound формы любите?
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322517
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02,

вот , что я наблюдаю после нажатия на кнопочку Refresh

... любит вас акцесс какой-то особенной любовью ... или вы его
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322524
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport... любит вас акцесс какой-то особенной любовью ... или вы его

:))
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322539
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭта ошибка и у меня выскакивала, когда в подчиненной форме отсутствовала запись. То есть значений никаких не было.
Конечно, в большинстве случаев эта ошибка выскакивает при отсутствии записей, либо при EOF = True, либо BOF = True.
Но у меня текущая запись фактически есть:
а) можно обратиться к любому полю формы через Form2.имяПоля
б) можно нормально редактировать поля формы (в процессе редактирования аномальное состояние формы сохраняется)

авторУ вас скорее всего при открытии главной формы, первая запись на главной форме не содержит никаких записей в подчиненной.
При загрузке главной формы подчинённой форме присваивается пустой RecordSet (т.к. связанных записей нет) и Visible = False
Далее при выборе в дереве (дерево находится на форме form1) некоторого узла подчинёной форме form2 присваивается RecordSet, указанный выше (+ requery). Далее выполняю form1.Refresh и форма form2 переходит в это самое состояние.

авторЯ решил эту проблему навесив на событие текущая запись процедуру проверки количества строк в подчиненной таблице. Если количество записей в подчиненной таблице по критерию текущей записи в главной таблице форме равно 0, то у меня вообще в подчиненной ничего не выводилось.
У form2 переходит в это самое аномальное состояние в тот момент, когда имеют место одновременно:
а) form2 отображает запись, которая существует и соответствует текущей записи главной формы form1 (и нормально редактируется)
б) выполняется form1.Refresh
После этого форма form2 уходит в ступор.
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322544
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimport , именно поэтому я и не состряпал тестовый пример. Знаю, что будет всё нормально.
Вы лучше скажите, как такое возможно: на форме можно редактировать поля (и изменения реально сохраняются), но в то же время при попытке доступа к любому из полей через Recordset формы выскакивает ошибка "Текущая запись отсутствует". Это ж аномалия в чистом виде.
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322554
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02 guest_rusimport , именно поэтому я и не состряпал тестовый пример. Знаю, что будет всё нормально.
Вы лучше скажите, как такое возможно: на форме можно редактировать поля (и изменения реально сохраняются), но в то же время при попытке доступа к любому из полей через Recordset формы выскакивает ошибка "Текущая запись отсутствует". Это ж аномалия в чистом виде.

в случае unbound форм , если вы используете Refresh основной формы один раз - ошибка возникать не будет, другое дело , если вы используете Refresh основной формы несколько раз подряд, то recordset подчиненной формы как бы перейдет в "неопределенное" состояние - текущая запись после таких "свистоплясок" у подчиненной формы в recordset-e "собъется" , т.е. будет не определена и достаточно будет "пробежаться" по рекордсету подчиненной формы , чтобы установить текущую запись (movelast - movefirst)... Когда же вы работаете с формой , так сказать, "визуально", то вы установливая курсор на то или иное поле подчиненной формы, сами того не ведая, определяете рекордсету текущую запись
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322593
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати стремно обращаться к рекордсету формы напрямую, типа me.recordset.действие , глючная нестабильная конструкция по умолчанию. Один раз ради прикола прокатился циклом по именно данной конструкции, с подсчетом нарастающего итога в каждой последующей строке. Записей было около 10 тыщ. Визуально просто эффектно смотриться - курсор физически бежит по строкам и значения вставляются. Но чуть что где сбилось и все - понеслись косяки. Нежнее и без лишних педалей использовать все связки на уровне модуля. Там есть волшебное свойство Dim тратата As recordset2. И если простая форма с использованием всего двух наборов записей то как говориться сам доктор прописал. Влупил все проверки на уровне кода, а в подчиненную остается лишь выводить результат. Извините что не могу скинуть идентичный пример, пишу с мобилы. Смысл-схлестывать два рекорсета в модуле , передавать значение текущей записи через глобальную переменную/или переменную модуля формы и только после всех проверок что то выводить на формы.
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322648
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что имеем для подчинённой формы в сабжевом состоянии:
form2.CurrentRecord = 1
form2.RecordSet.AbsolutePosition = -1

авторв случае unbound форм , если вы используете Refresh основной формы один раз - ошибка возникать не будет, другое дело , если вы используете Refresh основной формы несколько раз подряд, то recordset подчиненной формы как бы перейдет в "неопределенное" состояние - текущая запись после таких "свистоплясок" у подчиненной формы в recordset-e "собъется" , т.е. будет не определена
guest_rusimport , откуда у Вас эта информация ? Вы воспроизвели глюк в своём тестовом примере ?

Проверил по коду - с момента загрузки главной формы Refresh у меня вызывается только один раз. И сразу приводит к ступору подчинённой формы. Возможно, на этот ступор влияют предварительные Repaint, Painting = True/False, RecordSource = ..., Requery (таковые имеются).

авторКогда же вы работаете с формой , так сказать, "визуально", то вы установливая курсор на то или иное поле подчиненной формы, сами того не ведая, определяете рекордсету текущую запись
Не рекордсету, а форме. Т.е. form2.CurrentRecord. А это свойство и до установки курсора определено и равно 1.
Что касается form2.RecordSet.AbsolutePosition, то он как и был равен (-1), так и остаётся равным (-1) при установке курсора в поле и при редактирования полей.
Вывод : в сабжевом аномальном состоянии редактирование полей формы form2 происходит при form2.RecordSet.AbsolutePosition = -1. Как это форме удаётся - непонятно. Ведь работает форма с БД не напрямую, а через этот самый recordset.

автори достаточно будет "пробежаться" по рекордсету подчиненной формы , чтобы установить текущую запись (movelast - movefirst)...
Проще всего и корректнее всего так:
If (frm.Recordset.AbsolutePosition <> frm.CurrentRecord) Then frm.Recordset.AbsolutePosition = frm.CurrentRecord
Т.е. восстанавливаем текущую запись в рекордсете.
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322657
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСмысл-схлестывать два рекорсета в модуле , передавать значение текущей записи через глобальную переменную/или переменную модуля формы и только после всех проверок что то выводить на формы.
Сергей Лалов , что-то мне подсказывает, что у Вас была несколько иная проблема. В моей ситуации подчинённая форма имеет запись для отображения и корректное значение текущей записи содержится в form.CurrentRecord. А сбивается значение form.RecordSet.AbsolutePosition.

--------------------------
Что касается момента перехода подчинённой формы в сабжевое состояние.
Из всех вот этих операций
frm.Repaint
frm.Requery
frm.Refresh
frm.Recalc
frm.Painting = True/False
frm.RecordSource = ...

в ступор подчинённую форму переводят операции:
frm.Refresh
frm.Recalc
выполняемые для главной формы (выполнение их для подчинёной формы к глюку НЕ приведёт).

Судя по нормально работающему примеру guest_rusimport 'а, для наблюдения глюка одновременно с выполнением данных команд должны иметь место ещё какие-то факторы. Возможно, это предварительные Repaint, Painting = True/False, RecordSource = ..., Requery.
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322672
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322700
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПроще всего и корректнее всего так:
If (frm.Recordset.AbsolutePosition <> frm.CurrentRecord) Then frm.Recordset.AbsolutePosition = frm.CurrentRecord
Т.е. восстанавливаем текущую запись в рекордсете.
Правильно так:
If (frm.Recordset.AbsolutePosition <> frm.CurrentRecord - 1) Then frm.Recordset.AbsolutePosition = frm.CurrentRecord - 1
Первый вариант будет работать только если frm.CurrentRecord - последняя (или единственная) запись на форме
(т.к. при присваивании frm.Recordset.AbsolutePosition'у значения recordCount значение автоматически корректируется на (recordCount - 1))

????? 10981941
????? , ну так каково заключение ?
Там вроде тоже не решили проблему. Да и воспроизвести на тестовом примере не смогли.
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38322718
гыы!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02,

Cyrax_02Да и воспроизвести на тестовом примере не смогли.Да, повезло! Не у всех такие золотые руки! И не имеет значения откуда они растут.
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38330258
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня recordset у подчинённой формы сбрасываться в следующей ситуации:
а) на главной форме F1 расположена подформа F2, на подформе F2 - вкладка V1, на вкладке V1 - подформа F3, на подформе F3 - вкладка V2, на вкладке V2 - подформа FF (проблемная подформа)
б) на вкладке V1 расположен ещё один экземпляр FF
в) оба экземпляра FF отображают разные записи из одной и той же формы
г) выполняется Refresh или Recalc подформы F3 => подформа FF переходит в аномальное состояние

Если у кого есть время, попробуйте слепить текстовый пример по данной схеме. Я уже замудохался с этими экспериментами...

Могу предположить, что Repaint/Recalc сбрасывает Recordset.AbsolutePosition формы в (-1) в том случае, если в момент Repaint/Recalc открыт ещё один recordset на основе той же самой таблицы, данные из которой отображает проблемная форма.

Может, кто проверит, не поленится ?
...
Рейтинг: 0 / 0
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #38330281
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02...а) на главной форме F1 расположена подформа F2, на подформе F2 - вкладка V1, на вкладке V1 - подформа F3, на подформе F3 - вкладка V2, на вкладке V2 - подформа FF (проблемная подформа)...токо обращаясь к ней можно набить мозоли на пальцах
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
    #39812053
vremennyy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02Проще всего и корректнее всего так:
If (frm.Recordset.AbsolutePosition <> frm.CurrentRecord) Then frm.Recordset.AbsolutePosition = frm.CurrentRecord
Т.е. восстанавливаем текущую запись в рекордсете.

Дай Вам бог здоровья!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Аномальное состояние подчинённой формы: "Текущая запись отстутствует"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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