"Устранение ошибки 'Access Violation' при присвоении значения опубликованному свойству в Delphi 2009"Delphi , Базы данных , Модуль данныхУстранение ошибки 'Access Violation' при присвоении значения опубликованному свойству в Delphi 2009 При работе с 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 прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Модуль данных ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |