Форум: "Базы";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
ВнизКак определить почему возникает access violation? :( Найти похожие ветки
← →
Новичек (2003-11-25 14:08) [0]Господа, подскажите, пожалуйста, пути решения. Хоть сам кой-какой опыт в Дельфи имею, но никогда не попадал в такую "тупую" ситуацию.
Пишу "проект" - Delphi 7, MySQL, EhLib.
Все было хорошо, но на каком-то этапе внезапно стала возникать ошибка "Access Violation по такому-то адресу (разные адреса)".
Возникает плавающе (не всегда) в следующей ситуации - открывается форма редактирования любой записи из базы - на форме есть два чекбокса - меняешь состояние любого - жмешь Ок - изменение сохраняется в базе и ошибка может выскочить (а может и не выскочить) именно в этот момент.
Причем, изменения состояния других компонентов никак не влияет.
Кто может подсказать - что можно сделать в такой ситуации? Никак не пойму отчего это, самое неприятное, что ошибка плавающая. :(
Отключал модули, куски "проекта" - не помогает.
Подозреваю, что глючит EhLib, но уверенности нет. Как бороться?
Не дайте погибнуть!
← →
Digitman (2003-11-25 14:12) [1]
> Подозреваю, что глючит EhLib
запросто, кстати...
собери проект со всеми опциями встр.отладки
запусти его под отладчиком Делфи
выбери меню "Search | Find Error ..", введи адрес, фигурировавший в сообщении об AV ("..at address XXXXXXXX ...") - отладчик с достаточной долей вероятности покажет тебе строку исх.текста, при выполнении которой произошло AV
← →
Карелин Артем (2003-11-25 14:17) [2]Убедись, что в опциях проекта не стоит Complete boolean eval и сделай ребилд всего проекта.
← →
Новичек (2003-11-25 15:44) [3]Спасибо за ответы!
Может быть, кому-то, кто юзает (или хочет заюзать) EhLib, будет полезно - проблема оказалась в нем, как я и подозревал.
Причем, проблема неприятная - из разряда непонимаемых даже автором EhLib.
Мне помогло вот что - в DBGridEh.pas есть закомментированная строка:
Columns[SelectedIndex].Field := nil; //Some time AV BUG
Нужно ее раскомментировать и пересобрать проект. Ошибка уходит.
Стоит закоментировать обратно - снова вылезает.
Правда, как сказал сам автор EhLib, раскомментирование приводит к каким-то другим траблам, но каким он не помнит. Причину же возникновения проблемы вообще, по его словам, он так и не смог понять, что огорчает. :(
У меня пока ничего плохого не вылезло, но все равно неприятно - 70% проекта уже закончено, причем завязано все на EhLib (впрочем, ему альтернативы все равно по-большому счету нет), а тут такая засада.
← →
Riland (2003-11-25 15:52) [4]Всем приет
Юзаю EHlib уже года 4 (с момента его появления)
С повлением траблов в нем согласен
Я выходил из данной ситуации следующим образом - находил строку с ошибкой
(у меня компонент с исходниками) и брал его в try..except..end
Помогает на 100% - т/е/ ошибка вс равно вылзает, но она уже никакого
действия на функциональность прграммы не оказывает
А что альтернатиы EHLib в большенстве случаев нет - полность согласен.
Смотрел недавно Quantum Grid - уж очень он тяжел и перегружен
ненужными функциями (хотя для определенных задач он наверное подходит
на все 100%)
← →
Карелин Артем (2003-11-26 11:20) [5]Строчка их ЭхЛиба:
if Assigned(Column.KeyList) and (Column.KeyList.Count > 0) then
Что будет, когда Column.KeyList=nil и мы проверяем условие Column.KeyList.Count ??
Будет банальный AV. И так сделан весь компонент :((((((((
← →
Johnmen (2003-11-26 11:43) [6]>Что будет, когда Column.KeyList=nil
Будет Assigned(Column.KeyList)=False
← →
Sandman25 (2003-11-26 11:44) [7][6] Johnmen © (26.11.03 11:43)
Если $B-
← →
Anatoly Podgoretsky (2003-11-26 11:48) [8]Карелин Артем © (26.11.03 11:20) [5]
Очень некрасиво написано.
← →
Johnmen (2003-11-26 11:49) [9]>Sandman25 © (26.11.03 11:44)
Само сабой. Если кто-то и включает полное вычисление, то явно чего-то не то у него...:)
← →
Anatoly Podgoretsky (2003-11-26 11:53) [10]Ну так если писать квалифицировано, то форма
if Assigned(Column.KeyList) then
if Column.KeyList.Count > 0 then
не вызовет никаких проблем при любой настройке полного вычисления
← →
Sandman25 (2003-11-26 11:56) [11][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:59) [12]Sandman25 © (26.11.03 11:56) [11]
Речь то про конкретный случай, а в частных случаях частное решение. Кроме того надо четко различать, то что делается для себя и то что как база для других, распространяемые компоненты надо писать особо тщательно, тем более сложные, потом же замучаешься на еподдержке.
← →
Sandman25 (2003-11-26 12:05) [13][12] Anatoly Podgoretsky © (26.11.03 11:59)
Точно. Автор мог был вставить $B- в начале каждой процедуры, где используются такие финты.
← →
Карелин Артем (2003-11-26 12:23) [14]Sandman25 © (26.11.03 12:05) [13]
Автору надо еще кое-что вставить...
Я про код говорю...
← →
Johnmen (2003-11-26 12:27) [15]Мужики, вы чего ? Гляньте исходники D. Там сплошь и рядом так пишется.
if (Value <> nil) and (Value.Height > 0) then
← →
Johnmen (2003-11-26 12:29) [16]При этом опция компилятора B никак не выставляется...
← →
Sandman25 (2003-11-26 12:32) [17][16] Johnmen © (26.11.03 12:29)
Но используются DCU, откомпилированные при B-.
Значит, при изменении EhLib нужно сделать аналогично.
Вывод - те, кто ругают EhLib, не знают, как правильно с ним работать :)
← →
Anatoly Podgoretsky (2003-11-26 12:37) [18]Johnmen © (26.11.03 12:27) [15]
Ну и что, пишут, а мы расхлебываем.
Знаешь что Жириновский про таких говорит :-)
← →
Johnmen (2003-11-26 12:38) [19]>Sandman25 © (26.11.03 12:32)
>Вывод - те, кто ругают EhLib, не знают, как правильно с ним работать :)
Вот это верно !
← →
Johnmen (2003-11-26 12:39) [20]>Anatoly Podgoretsky © (26.11.03 12:37)
:)))
← →
Карелин Артем (2003-11-27 11:36) [21]>Вывод - те, кто ругают EhLib, не знают, как правильно с ним работать :)
Угу, а как насчет ошибки при сортировке запроса из хранимой процедуры этим самым компонентом?
← →
Sandman25 (2003-11-27 11:37) [22]>Угу, а как насчет ошибки при сортировке запроса из хранимой процедуры этим самым компонентом?
Никак. Я никогда такое не использовал :)
← →
Карелин Артем (2003-11-27 11:45) [23]Sandman25 © (27.11.03 11:37) [22]
Значит ты не умеешь им пользоваться :)
У вас винда работает без ошибок? А вы комп включать пробовали??
← →
Sandman25 (2003-11-27 11:49) [24]>Значит ты не умеешь им пользоваться :)
А другой причины быть не может? Например, те СУБД, которые я использую, не поддерживают запросы вида select * from stored_proc :)
← →
Карелин Артем (2003-11-27 11:53) [25]Там выражение Order by заполняется номерами полей, а не именами.
← →
Sandman25 (2003-11-27 12:12) [26][25] Карелин Артем © (27.11.03 11:53)
А разве не так надо?
select a from table
union
select b from table
order by имя_поля
Даже не будет работать в независимости от имя_поля.
А с номером - будет.
← →
Карелин Артем (2003-11-27 12:28) [27]Sandman25 © (27.11.03 12:12) [26]
У меня в FB через номера запросы не проходят...
← →
Sandman25 (2003-11-27 12:32) [28][27] Карелин Артем © (27.11.03 12:28)
По стандарту SQL-92 нужны именно номера. Меняйте СУБД...
Шучу :) Я думаю, лучше переделать компонент, добавив еще одно поле UseFieldNameInOrderSection типа boolean
← →
Карелин Артем (2003-11-27 12:38) [29]Sandman25 © (27.11.03 12:32) [28]
Судя по исходникам автор хотел сделать эту фичу настраиваемой, но потом забросил это дело.
Я лично при установке этого пакета сразу меняю чуть-чуть код для жесткой привязки к именам.
← →
Sandman25 (2003-11-27 12:41) [30][29] Карелин Артем © (27.11.03 12:38)
Тогда чего Вы обижаетесь на [17] Sandman25 © (26.11.03 12:32)
Похоже, что Вы-то умеете их использовать. А ругаете их за старые "заслуги", которые уже не используете :)
← →
Карелин Артем (2003-11-27 12:49) [31]Да я вообще не обижаюсь, просто резок в суждении временами. Возраст такой.
Еще свежи в памяти моменты, когда проект с мегом исходников вдруг перестал загружаться по неизвестной причине и дельфи падала после каждой компилляции проекта на всех компах, куда я приносил проект просто из-за случайно поставленной галочки в опциях. Сколько нервов было потрачено и сколько пива выпито из-за гадкого настроения - не сосчитать.
← →
Sandman25 (2003-11-27 13:09) [32]Понимаю. Старайтесь плохое прощать, а еще лучше забывать, здоровья больше сохраните. Впрочем, это уже offtopic.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.009 c