[ itf @ 28.02.2006. 16:22 ] @
U C++ Builder-u 6.0 koristim ADO komponente za rad sa bazama podataka. Kada se dogodi neka greska kako da provjerim koja je to greska pa da na osnovu te informacije nesto napravim? Jedino sto mi pada na pamet jest usporedjivanje error stringova, no valjda postoji i inteligentnije rjesenje?

Znaci, da li igdje postoji popis svih tih greski ili nekakvi njihovi ID-ovi pa da ih tako prepoznam?
[ X Files @ 28.02.2006. 16:41 ] @
Koliko sam ja upucen, ne postoje neki ID-jevi gresaka kao sto je to bilo u BDE.

Po pravilu, greske treba traziti kolekciji:

TADOConnection::Errors

(najbolje ukljuci onaj IntelliSense da ti automatski predlozi metode)


Mad ja to radim ovako, jer mi se cini da detaljnije mogu da kazem
korisniku sta se desilo:

Code:

void __fastcall TMainDB::NekaTabelaPostError(TDataSet *DataSet, 
      EDatabaseError *E, TDataAction &Action) 

   // Iskljuci sistemske poruke o gresci
   Action = daAbort; 


   if ( StrPos( E->Message.c_str(), "duplicate values" ) != NULL ) 
   { 
      // MESSAGE: ... 
      return; 
   } 


   if ( StrPos( E->Message.c_str(), "zero-length"       ) || 
        StrPos( E->Message.c_str(), "Null value"        ) || 
        StrPos( E->Message.c_str(), "must have a value" ) || 
        StrPos( E->Message.c_str(), "Error in row"      ) || 
        StrPos( E->Message.c_str(), "Empty row cannot be inserted" ) ) 
   { 


      if ( StrPos( E->Message.c_str(), "Polje1" ) ) 
      { 
         // MESSAGE: ... 
         return; 
      } 


      if ( StrPos( E->Message.c_str(), "Polje2" ) ) 
      { 
         // MESSAGE: ... 
         return; 
      } 

      // ...

      // PORUKA: "Red ne moze biti prazan" 

      // ...

      return; 
   } 

   ShowMessage( "Nepoznata greska: " + E->Message ); 
   return; 



[ itf @ 28.02.2006. 16:46 ] @
Ah... nista onda. Bacit se na analizu stringova i to je to.