Toon posts:

[C++ Builder] DBError afvangen*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil database errors afvangen en mijn eigen message laten zien. Ik doe dit op de volgende manier:

C++:
1
2
3
4
5
6
7
8
9
try
{
  DataModule1->qLoginUS->Prepare();
  DataModule1->qLoginUS->ExecSQL();
}
catch (const DBError)
{
  throw DBError;
}

Nu zit ik met het volgende.
Ik heb gezocht naar Exception-Declaration voor database errors. Ik heb er meerdere gevonden, o.a. deze:

DBError
EDatabaseError
DatabaseError
EDBEngineError

Ik kan alleen niet vinden welke ik nu moet gebruiken. Ik heb zo'n vermoeden dat ik er zelfs meerdere moet afvangen (of ik dat flauwekul?). De melding die ik afvang krijg ik namelijk wel te zien, maar pas nadat ik een automatisch gegenereerde melding krijg.

Ik heb als database SQL Server 2000 en mijn progje maak ik met Borland C++ Builder 4.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Titel gemod. Leer eens ipv gewoon C++ in je title, C++ Builder in je topic title te zetten als het over C++ Builder gaat.

Ik kan het hier nu niet checken, maar ik denk dat je genoeg hebt met het afvangen van 1 v/d type exceptions.

Ik doe het meestal zo:
code:
1
2
3
4
5
6
7
8
9
try
{
}
catch (EDatabaseError)
{
  MessageDlg ("Fout opgetreden.", 
                       TMsgDlgButtons << mbOk,
                       mtError, 0);
}


offtopic:
ps, heb je nu al gevonden hoe je die DSN's kunt ophalen?

https://fgheysels.github.io/


Verwijderd

Wat ik altijd doe, is dat ik de exception genereer, (Door dus juist in te typen dat die exception genereert) en dan krijg je vanzelf een msgbox met de exception melding. De type exception staat daar daan ook altijd in. (bv. EOleException)

Verder kan je volgens mij ook catch ( ... ) doen, maar dan vangt ie alles af.....

Ook is het zo dat ondanks dat je die exception catched je in debug-mode die exception msgbox blijft tonen. Om dit uit te zetten moet je in borland opgeven welke exceptions ie niet moet tonen....

  • [ti]
  • Registratie: Februari 2000
  • Niet online
C++:
1
2
3
4
5
6
7
8
9
try
{
  DataModule1->qLoginUS->Prepare();
  DataModule1->qLoginUS->ExecSQL();
}
catch (Exception &e)
{
  MessageDlg("Exception: " + e.Message, mtError, TMsgDlgButtons() << mbOK, 0);
}