Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-62223
3dcat
2003-11-27 21:17
2003.12.19
Нужны разработчики


3-61923
Russko
2003-11-27 12:33
2003.12.19
Как узнать наличие индексов в таблице?


3-61940
Calm
2003-11-26 16:03
2003.12.19
Правильно ли круглосточно поддерживать соединение к БД?


1-62132
Mag
2003-12-07 22:19
2003.12.19
Отключения


1-62077
alexnmsk
2003-12-09 08:15
2003.12.19
Подгружаемый TStringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский