Toon posts:

[Delphi] Hoe type van EDatabaseError bepalen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als er een EDatabaseError optreedt, hoe kan ik dan bepalen wat precies de error is? Er zijn namelijk bij meerdere situaties dat deze error gecreerd wordt.

Bij een EIBError heb je bijv een IBErrorCode veld. Aan de hand van dat veld kan je dan zien wat precies de fout is.

Bij de EDatabaseError heb je niet zulke velden. Het enige wat je daar hebt is een Message property. Die kan bijvoorbeeld de volgende waarde hebben: "Field '.....' not found." Maar het lijkt mij nou niet echt een mooie oplossing om op dit veld te checken.

(Iets anders: is er bij Delphi ook een manier om heel snel te kunnen zien welke errors er op kunnen treden bij een bepaalde functie/procedure? Bij java kan je dat allemaal heel mooi zien in de java documentatie. Is in Delphi de enige mogelijkheid om zelf in de source te spitten?)

  • yodax
  • Registratie: Januari 2000
  • Laatst online: 28-04 08:47
Je kan het testen door gebruik te maken van de Runtime Type Information over een object als ik me niet vergis.

Bijv:
code:
1
2
3
4
5
6
7
8
try

 ...
except
  on EZeroDivide do HandleZeroDivide;
  on EOverflow do HandleOverflow;
  on EMathError do HandleMathError;
end;


Ook kan dit:

code:
1
2
3
4
5
6
try

 ...
except
  on E: Exception do ErrorDialog(E.Message, E.HelpContext);
end;


code:
1
2
3
4
5
6
7
8
9
10
try

 ...
except
  on EZeroDivide do HandleZeroDivide;
  on EOverflow do HandleOverflow;
  on EMathError do HandleMathError;
else
  HandleAllOthers;
end;


Je kan dus onderaan je EdatabaseError neer zetten (of een else gebruiken, dat kan ook) er boven zet je dan je gedetaileerde handlers neer.

Door gebruik te maken van de E variabele kan je de waardes meegeven aan je Exception handling routines.

Dit komt btw uit de help: Try...except statements

Kijken welke errors een functie mogelijk raised staat bij _sommige_ functies in de help, borland is hier niet consequent mee geweest. De manier die ik altijd gebruik is gewoon een keer de exception triggeren en dan kijken met de debugger welke het is, en een default handler toevoegen gebasseerd op de Exception classe.

Mocht je gebruiken maken van een globale exception handler in je applicatie kan je met de is operator kijken van welke classe de exceptie is.

Verwijderd

Topicstarter
yodax schreef op 24 augustus 2002 @ 16:19:Door gebruik te maken van de E variabele kan je de waardes meegeven aan je Exception handling routines.

Dit komt btw uit de help: Try...except statements
Ja dit weet ik allemaal, maar hiermee kan ik niet bepalen wat precies de error is.
De manier die ik altijd gebruik is gewoon een keer de exception triggeren en dan kijken met de debugger welke het is, en een default handler toevoegen gebasseerd op de Exception classe.
Is ook een manier ja :)

  • yodax
  • Registratie: Januari 2000
  • Laatst online: 28-04 08:47
Ik begrijp nu wat je bedoelt! (traag he :P)

Wat ik je wel kan vertellen is dat zover als ik weet het niet mogelijk is. Dit komt omdat je gebruik maakt van een database die bv gekoppeld is via de bde, hier kan in principe elk type database achter hangen.

De database zelf stuurt het error bericht naar de BDE en die geeft het door door middel van een exceptie. Hierbij zijn echter niet bij alle databases errorcodes voor beschikbaar, laatstaan dat ze dezelfde codes gebruiken.

Het feit dat het bij interbase wel werkt is omdat die van borland is, ook hebben die eigen componenten.

Mocht ik het mis hebben ben ik benieuwd naar hoe iemand dit heeft opgelost, mijn collega vroeg mij dit ook van de week namelijk.

[ Voor 0% gewijzigd door yodax op 24-08-2002 18:52 . Reden: typo's ]