Перед тем как Дельфи сможет использовать любые ActiveX/COM (в том числе и ADO компоненты) должна быть выполнена строка Application.Initialize - которая инициализирует использование COM. Если пишется DLL или консольное приложение, которые не имеют объекта Application, то надо просто добавить в Uses ещё один модуль: "oleauto"
Как отловить ошибку?
Вот как будет выполняться код:
[Line 1]
Try
[Line 2]
[Line 3]
[Line 4]
Except
[Line 5]
End
[Line 6]
Допустим что [Line x] это строка какого-то Вашего кода. Предположим что при выполнении [Line 3] произошла ошибка, тогда программа будет выполнять строки:
1-2-3(ошибка!)-5-6
Если ошибки нет то будут выполняться следующие линии кода:
1-2-3-4-6
Если надо чтобы ошибка произошла, но перед этим Вы хотите выполнить некие свои действия, то организовать это можно следующим способом:
Как перехватить сообщение об ошибке?
Как предотвратить утечки памяти при возникновении ошибок?
Используйте конструкцию
Например, это часто применяется во избежание утечек при динамическом распределении памяти:
Как сгенерировать свою ошибку?
Примечание: в отличие от других объектов, объекты типа Exception или других классов, унаследованных от Exception не требуют вызова деструкторов или любых других действий по освобождению памяти после их создания.
Почему возникает ошибка Access Violation?
Ошибка "Access Violation" возникает, когда идёт обращение к памяти к которой обращение запрещено. Это возможно во многих случаях, но наиболее типичные ситуации я попытаюсь перечислить:
1) Обращение к не созданному объекту.
В данном случае объект e ещё не создан и идёт обращение к памяти, которая ещё не выделена.
2) Обращение к уже разрушенному объекту:
Тут есть хитрость, допустим вы хотите проверить есть ли объект и модернизируете код:
или
Особенно часто приходится такое делать когда надо уничтожить объект:
Так вот - такой код может быть источником ошибки, так как метод Free автоматически не устанавливает указатель в Nil. Обязательно после каждого Free используйте установление указателя в nil:
3) При выходе за границы динамического массива обычно генерится ошибка "Index out of bound", но возможно и возникновение Access Violation, особенно когда не стоят опции компилляции для проверки границ массивов. Эта ошибка может быть очень сложна в отлаживании - дело в том что допустим у вас есть массив а длиной в 10 элементов, в пишете:
И эта строка может пройти как и надо, без всяких проблем, но её выполнение повредит какой-то другой код, причём каждый раз другой! Теперь самая безобидная операция типа i:=10 может вдруг внезапно дать Access Violation.
3) На форме на onCreate вызывается что-то с других форм - эти другие формы на этот момент еще не созданы
4) На форме на onDestroy вызывается что-то с других форм - эти другие формы на этот момент уже разрушены
Список префиксов Internal Error
Иногда выскакивают ошибки типа "Internal Error SY424", вот расшифровка префиксов: