![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Устранение ошибки 'Access Violation' при присвоении значения опубликованному свойству в Delphi 2009Delphi , Базы данных , Модуль данных
При работе с Delphi 2009 вы столкнулись с ошибкой 'Access Violation' при попытке присвоить значение опубликованному свойству компонента на Datenodule. В данной статье мы рассмотрим причину этой ошибки и способы ее устранения. Описание проблемы В вашем приложении на Delphi 2009 есть Datenodule, на котором расположен кастомный компонент 'Globals'. Вы пытаетесь изменить опубликованное свойство (строковый тип) компонента 'Globals' на другой форме:
Контрол _ProjectName является потомком TLabeledEdit. Ошибка 'Access Violation' возникает, только если в поле есть какой-либо текст. Если присвоить значение свойству вручную, ошибка не происходит:
Определение свойства qhProject выглядит следующим образом:
Вы не можете понять, почему возникает ошибка 'Access Violation', и перемещали порядок автоматического создания форм и Datenodule, но ошибка все равно появлялась. Обновление Вы используете TFormContainer из Billenium Effects для переключения между формами в приложении. Обе формы, участвующие в проблеме, находятся в контейнере форм. На форме TdlgSummary есть процедура SyncVars:
На форме TdlgFinalize вызывается эта процедура:
Если вызывать SyncVars внутри TdlgSummary, все работает нормально. Если вызывать ее из TdlgFinalize, возникает ошибка 'Access Violation'. Кажется, что проблема кроется именно в этом, но вы не можете понять, что именно идет не так. Даже если переключиться на TdlgFinalize, TdlgSummary не уничтожается, так как к ней можно вернуться. Есть ли идеи, как решить эту проблему? Альтернативный ответ Возможно, контрол _ProjectName является nil. Попробуйте поставить точку останова на этой строке и просмотрите _ProjectName, чтобы проверить, дает ли он действительную ссылку или нет. Подтвержденный ответ
Оказалось, что проблема связана с TFormContainer. Компонент создавал форму, но не присваивал ее глобальной переменной. Добавление Вывод При работе с компонентами на Datenodule важно правильно обращаться к ним и учитывать особенности их создания и уничтожения. В данном случае проблема была связана с TFormContainer и неправильным присвоением созданной формы глобальной переменной. Устранение этой проблемы помогло избежать ошибки 'Access Violation' при присвоении значения опубликованному свойству компонента на Datenodule. Устранение ошибки 'Access Violation' при присвоении значения опубликованному свойству в Delphi 2009 на Datenodule. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Модуль данных ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |