|
|
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Ciao a tutti. Мне вот интересно, почему образуется битая ссылка на объект в программе на Delphi. Что происходит с контролами в памяти в ран-тайме? Сейчас не могу показать код, попробую на словах рассказать. 1. Обычная форма VCL, которая создается на старте приложения. На форме есть pagecontrol с двумя страницами. На каждой странице есть один грид и одна панель. На форме также валяются два adoquery. 2. Создаю класс-наследник TForm. 3. В этом классе помимо всего есть и поле типа TAdoQuery. Ну, и кнопка кроме всего прочего... 4. Создаю два объекта класса этой формы и через сеттер инициализирую поле tAdoQuery - поле смотрит на то место в памяти, где лежит adoquery с главной формы. Оба объекта натягиваю на панели в первой форме. Ну, надо мне так... Все корректно инициализируется - проверил. По кнопке надо обратиться к тем самыи квери, которые передал по ссылке из главной формы. Но в памяти все переигралось. Ссылки на квери из динамической формы почему-то стали не актуальны. Квери на главной форме в памяти куда-то переехали и я уже до них не могу добраться из динамически созданных форм. Разве инициализированные объекты в памяти не висят по одним и тем же адресам? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 01:15 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Galadriel75 Оба объекта натягиваю на панели в первой форме. Ну, надо мне так... Все корректно инициализируется - проверил. Плохо проверил. Наличие битых ссылок - вина программиста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 02:11 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
DimaBr Galadriel75 Оба объекта натягиваю на панели в первой форме. Ну, надо мне так... Все корректно инициализируется - проверил. Плохо проверил. Наличие битых ссылок - вина программиста Полагаю, саму эмбаркадеру тоже делали программисты? Стало быть, это их вина? А я все отлично проверил, 5 строчнек кода, там и проверять нечего. Если есть что по существу, тогда хорошо, а в ином случае - неинтересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 10:08 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Galadriel75, по существу уже ответили. Ищите ошибку в своем коде, т.к. битые ссылки в приложении однозначная вина разработчика кода приложения . Код системного уровня, отвечающий непосредственно за управление памятью, проверен на триллионах прогонах в миллионах приложений. Выкладывайте свой код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 10:28 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
в конструкторе главной формы: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. frmEnterDataAccrual и frmEnterDataDeduct - созданы! В момент onShow главной формы инициализация полей форм, которые только что создали: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 10:44 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
frmEnterDataAccrual.setQueryParam(self.qryAccrual) frmEnterDataAccrual.setQueryParam(self.qryDeduct) - инициализированы верно - сразу после инициализации я дернул у них SQL.text - каждый показал свой sql - объекты в памяти живут. Когда нажимаю на кнопку: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. fQueryParam.close; fQueryParam.Open; уже не могут отработать - они не видят тот объект, который видели в момент инициализации! те самые две ADOQuery, ссылки на которые я передал в динамически созданную форму как бы есть, но уже где-то в другом месте в памяти. Может так и не стоит делать, может лучше передать ссылку на всю форму, на котороую динамические формы натягиваю... Вариантов много, как можно соорудить, но хотелось бы понять, почему в этом случае теряются объекты по ссылкам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:04 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Что такое fQueryParam и как он связан со всем предыдущим текстом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:19 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
DimaBr Что такое fQueryParam и как он связан со всем предыдущим текстом ? Код: pascal 1. 2. 3. 4. 5. 6. fQueryParam : TADOQuery; Код: pascal 1. 2. 3. 4. 5. 6. 7. fQueryParam : TADOQuery; - смотрит на тот квери, который валяется на главной форме. Проект не мой изначально. Квери я не храню на формах... Переделывать уже нет времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:27 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Чтобы найти по коду, где вы затираете frmEnterDataAccrual, уберите его из свойств формы и объявите такую же функцию Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Тогда СОЗДАТЬ ФОРМУ (присвоить новое значение на ссылку) из каких либо других мест уже не получится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:28 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:34 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
// тут fQueryParam получает значение self.qryDeduct а про self.qryAccrual забывает - он не забывает - создаются же ДВА РАЗНЫХ обехкта одного класса - память выделяется для КАЖДОГО отдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:46 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
и еще вопрос - а как на форуме код выделять? - чето [COLOR] не прокатывает у меня... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:47 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Galadriel75 и еще вопрос - а как на форуме код выделять? - чето [COLOR] не прокатывает у меня... В редакторе есть ссылка "Помощь". Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:51 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
wadman Galadriel75 и еще вопрос - а как на форуме код выделять? - чето [COLOR] не прокатывает у меня... В редакторе есть ссылка "Помощь". Код: pascal 1. 2. 3. ок пасиб гляну ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 11:58 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Galadriel75 и еще вопрос - а как на форуме код выделять? - чето [COLOR] не прокатывает у меня... Нажмите на Цитировать и увидите, как это сделано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 12:21 |
|
||
|
Расположение объектов в памяти и ссылки на них
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. ой! Точно! Спасибо!!! Тока щас увидел! Вот же!!!! Атас! Всем спасибо за участие и помощь!!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2020, 12:43 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39984853&tid=2038113]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 445ms |

| 0 / 0 |
