Az adatbázis hibák forrása sokféle lehet. Ha nem kezeljük megfelelően a felmerülő hibákat, akkor a Delphi és a BDE üzeneteit láthatjuk, ami nem szép megoldás egy magyar nyelvű programban, ráadásul beláthatatlan, hogy a hibaüzenet után alkalmazásunk miként fog működni.
Ha mi akarjuk kezelni a hibákat, 3 fajta lehetőség kínálkozik.
- A legegyszerűbb, ha a kritikus algoritmusokat try-except blokkokban helyezzük el. Ez a megoldás eléggé egyszerű, de nem alkalmazható minden esetben. Nem használhatjuk például akkor, ha adatfüggő kontrolokat használunk.
- Egy másik megoldás, ha felhasználjuk az adathozzáférést biztosító komponensek hibakezelő eseményeit. Pl.: OnDeleteError, OnEditError, OnPostError, stb.
- Létrehozhatunk egy globális ApplicationEvents objektumot is, melynek az OnException eseményén keresztül kezelhetjük az egyes hibákat.
A mellékelt példaprogramban mindhárom megoldásra található példa.
Ha az adatforrás hibakezelő eseményeit használjuk, akkor az eseménykezelő eljárásban kapunk egy paramétert, melynek típusa EDatabaseError.
procedure Table1DeleteError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);
Az EDatabaseError osztály, Message tagjából kiolvashatjuk a hibaüzenetet.
Az Action paraméter határozza meg, hogy mi történjen a hiba kezelése után. A daFail esetén a rendszer ad hibaüzenetet. daAbort esetén a hibaüzenet nem jelenik meg. A daRetry megpróbálja megismételni a műveletet. Ezt akkor használjuk, ha sikerült megszüntetnünk a hiba okát.
Ha a harmadik megoldást választjuk, akkor az OnException esemény E paraméteréből értesülhetünk a hibáról.
procedure ApplicationEvents1Exception(Sender: TObject; E: Exception);
Ebben az esetben, az adatbázis hibák kezeléséért a EDBEngineError osztály a felelős. Az osztály egyszerre több hibaüzenetet is tárolhat, melyek kezeléséhez két property áll rendelkezésünkre.

ErrorCount
property ErrorCount: Integer;
Az Errors property-ben található hibák számát adja meg.

Errors
property Errors[Index: Integer]: TDBError;
Egy tömb, amely a hibákat tartalmazza.
Az Errors property minden egyes eleme TDBError típusú, melynek a következő tulajdonságai vannak:

Category
Osztály: TDBError
property Category: Byte;
A BDE hibakód felső bájtja.

ErrorCode
Osztály: TDBError
property ErrorCode: DBIResult;
BDE hibakód.

Message
Osztály: TDBError
property Message: String;
Az ErrorCode-ban található hibakódhoz tartozó hibaüzenet.

NativeError
Osztály: TDBError
property NativeError: Longint;
Segítségével megállapíthatjuk, hogy a hiba a szerverről jött-e. Ha értéke 0, akkor a hiba nem a szerverről jött.

SubCode
Osztály: TDBError
property SubCode: Byte;
A BDE hibakód alsó bájtja.