![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить почему возникает access violation? :( [D7, MySQL]
Новичек © (2003-11-25 14:08:00)
Господа, подскажите, пожалуйста, пути решения. Хоть сам кой-какой опыт в Дельфи имею, но никогда не попадал в такую "тупую" ситуацию.
Пишу "проект" - Delphi 7, MySQL, EhLib.
Все было хорошо, но на каком-то этапе внезапно стала возникать ошибка "Access Violation по такому-то адресу (разные адреса)".
Возникает плавающе (не всегда) в следующей ситуации - открывается форма редактирования любой записи из базы - на форме есть два чекбокса - меняешь состояние любого - жмешь Ок - изменение сохраняется в базе и ошибка может выскочить (а может и не выскочить) именно в этот момент.
Причем, изменения состояния других компонентов никак не влияет.
Кто может подсказать - что можно сделать в такой ситуации? Никак не пойму отчего это, самое неприятное, что ошибка плавающая. :(
Отключал модули, куски "проекта" - не помогает.
Подозреваю, что глючит EhLib, но уверенности нет. Как бороться?
Не дайте погибнуть!
Anatoly Podgoretsky (2003-11-26 11:59:00) [21]
Sandman25 © (26.11.03 11:56) [11]
Речь то про конкретный случай, а в частных случаях частное решение. Кроме того надо четко различать, то что делается для себя и то что как база для других, распространяемые компоненты надо писать особо тщательно, тем более сложные, потом же замучаешься на еподдержке.
Sandman25 (2003-11-26 11:56:00) [22]
[9] Johnmen © (26.11.03 11:49)
Согласен :)
[10] Anatoly Podgoretsky © (26.11.03 11:53)
Очень правильно. Но бывают более сложные случаи. Например: A and (B or C) or D and E. Если их раскрывать так же, то становится труднее понимать логику условия.
Anatoly Podgoretsky (2003-11-26 11:53:00) [23]
Ну так если писать квалифицировано, то форма
if Assigned(Column.KeyList) then
if Column.KeyList.Count > 0 then
не вызовет никаких проблем при любой настройке полного вычисления
Johnmen (2003-11-26 11:49:00) [24]
>Sandman25 © (26.11.03 11:44)
Само сабой. Если кто-то и включает полное вычисление, то явно чего-то не то у него...:)
Anatoly Podgoretsky (2003-11-26 11:48:00) [25]
Карелин Артем © (26.11.03 11:20) [5]
Очень некрасиво написано.
Sandman25 (2003-11-26 11:44:00) [26]
[6] Johnmen © (26.11.03 11:43)
Если $B-
Johnmen (2003-11-26 11:43:00) [27]
>Что будет, когда Column.KeyList=nil
Будет Assigned(Column.KeyList)=False
Карелин Артем (2003-11-26 11:20:00) [28]
Строчка их ЭхЛиба:
if Assigned(Column.KeyList) and (Column.KeyList.Count > 0) then
Что будет, когда Column.KeyList=nil и мы проверяем условие Column.KeyList.Count ??
Будет банальный AV. И так сделан весь компонент :((((((((
Riland (2003-11-25 15:52:00) [29]
Всем приет
Юзаю EHlib уже года 4 (с момента его появления)
С повлением траблов в нем согласен
Я выходил из данной ситуации следующим образом - находил строку с ошибкой
(у меня компонент с исходниками) и брал его в try..except..end
Помогает на 100% - т/е/ ошибка вс равно вылзает, но она уже никакого
действия на функциональность прграммы не оказывает
А что альтернатиы EHLib в большенстве случаев нет - полность согласен.
Смотрел недавно Quantum Grid - уж очень он тяжел и перегружен
ненужными функциями (хотя для определенных задач он наверное подходит
на все 100%)
Новичек (2003-11-25 15:44:00) [30]
Спасибо за ответы!
Может быть, кому-то, кто юзает (или хочет заюзать) EhLib, будет полезно - проблема оказалась в нем, как я и подозревал.
Причем, проблема неприятная - из разряда непонимаемых даже автором EhLib.
Мне помогло вот что - в DBGridEh.pas есть закомментированная строка:
Columns[SelectedIndex].Field := nil; //Some time AV BUG
Нужно ее раскомментировать и пересобрать проект. Ошибка уходит.
Стоит закоментировать обратно - снова вылезает.
Правда, как сказал сам автор EhLib, раскомментирование приводит к каким-то другим траблам, но каким он не помнит. Причину же возникновения проблемы вообще, по его словам, он так и не смог понять, что огорчает. :(
У меня пока ничего плохого не вылезло, но все равно неприятно - 70% проекта уже закончено, причем завязано все на EhLib (впрочем, ему альтернативы все равно по-большому счету нет), а тут такая засада.
Карелин Артем (2003-11-25 14:17:00) [31]
Убедись, что в опциях проекта не стоит Complete boolean eval и сделай ребилд всего проекта.
Digitman (2003-11-25 14:12:00) [32]
> Подозреваю, что глючит EhLib
запросто, кстати...
собери проект со всеми опциями встр.отладки
запусти его под отладчиком Делфи
выбери меню "Search | Find Error ..", введи адрес, фигурировавший в сообщении об AV ("..at address XXXXXXXX...") - отладчик с достаточной долей вероятности покажет тебе строку исх.текста, при выполнении которой произошло AV