Hi
Meine Umgebung ist:
Borland CBuilder V5
ODBC auf local Microsoft Access zum experimentieren
Das Ziel ist dann über ODBC auf INFORMIX dynamic Server zuzgreifen.
Ziel ist auch meine Kenntnisse in SQL so gut wie möglich auszubauen bzw zu nutzen.
Ich bin Anfänger in der Datenbankentwicklung und will erst mal ein paar Grundfunktionen auf die Reihe bringen. In der Recorddefinition ist ein Feld
als Primarykey definiert und muß eindeutig sein. Ich versuche nun bewußt einen neuen Satz mit bereits bestehenden Primarykey einzutragen und erwarte eine Fehlerreaktion auf die ich vom Programm aus reagieren kann. Der Effekt ist aber, daß ich ungefragt und unerwünscht eine Fehler-Messagebox mit wunderschöner Fehlermeldung bekomme bei der der letzte Satz heißt "Prozeß wurde angehalten". Es ist kein Haltepunkt eingetragen und diese Situatuation tritt auch auf wenn kein Debugging bei der Übersetzung eingestellt ist. Er bleibt hinter der ExecSql stehen um dann nach manuellem Weiterstarten in die exception zu laufen. Bei den Ereignisfunktionen scheint er nicht anzukommen.
char Volume[6];
char Archiv[4];
char Platz[4];
char Message[2048];
short IntVol = 1;
int x;
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("insert into Medium (Medium_Volume,Medium_Archiv,Medium_Platz,IntVol) Values ('xxx','yyy','zzz',:IntVol);");
x = 1;
while (x < 5)
{
Query1->ParamByName("IntVol")->AsInteger = IntVol;
try
{
Query1->ExecSQL();
}
catch (Exception &E)
{
sprintf(Message,"ErrMsg=%i",E);
x=MessageBox(0,"DB Return",Message,MB_OK);
};
IntVol++;
MessageBox(0,"DB durchlaufen","E=0",MB_OK);
x++;
};
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Query1UpdateError(TDataSet *DataSet,
EDatabaseError *E, TUpdateKind UpdateKind,
TUpdateAction &UpdateAction)
{
int x=1;
UpdateAction=uaSkip;
if (E == 0)
{x=MessageBox(0,"DB Return","E=0",MB_OK);}
else
{x=MessageBox(0,"DB Return","E=0",MB_OK);};
return;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Query1PostError(TDataSet *DataSet,
EDatabaseError *E, TDataAction &Action)
{
int x=1;
if (E == 0)
{x=MessageBox(0,"DB Return","E=0",MB_OK);}
else
{x=MessageBox(0,"DB Return","E=0",MB_OK);};
return;
}
Viele Gruesse
Hans-Peter
Meine Umgebung ist:
Borland CBuilder V5
ODBC auf local Microsoft Access zum experimentieren
Das Ziel ist dann über ODBC auf INFORMIX dynamic Server zuzgreifen.
Ziel ist auch meine Kenntnisse in SQL so gut wie möglich auszubauen bzw zu nutzen.
Ich bin Anfänger in der Datenbankentwicklung und will erst mal ein paar Grundfunktionen auf die Reihe bringen. In der Recorddefinition ist ein Feld
als Primarykey definiert und muß eindeutig sein. Ich versuche nun bewußt einen neuen Satz mit bereits bestehenden Primarykey einzutragen und erwarte eine Fehlerreaktion auf die ich vom Programm aus reagieren kann. Der Effekt ist aber, daß ich ungefragt und unerwünscht eine Fehler-Messagebox mit wunderschöner Fehlermeldung bekomme bei der der letzte Satz heißt "Prozeß wurde angehalten". Es ist kein Haltepunkt eingetragen und diese Situatuation tritt auch auf wenn kein Debugging bei der Übersetzung eingestellt ist. Er bleibt hinter der ExecSql stehen um dann nach manuellem Weiterstarten in die exception zu laufen. Bei den Ereignisfunktionen scheint er nicht anzukommen.
char Volume[6];
char Archiv[4];
char Platz[4];
char Message[2048];
short IntVol = 1;
int x;
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("insert into Medium (Medium_Volume,Medium_Archiv,Medium_Platz,IntVol) Values ('xxx','yyy','zzz',:IntVol);");
x = 1;
while (x < 5)
{
Query1->ParamByName("IntVol")->AsInteger = IntVol;
try
{
Query1->ExecSQL();
}
catch (Exception &E)
{
sprintf(Message,"ErrMsg=%i",E);
x=MessageBox(0,"DB Return",Message,MB_OK);
};
IntVol++;
MessageBox(0,"DB durchlaufen","E=0",MB_OK);
x++;
};
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Query1UpdateError(TDataSet *DataSet,
EDatabaseError *E, TUpdateKind UpdateKind,
TUpdateAction &UpdateAction)
{
int x=1;
UpdateAction=uaSkip;
if (E == 0)
{x=MessageBox(0,"DB Return","E=0",MB_OK);}
else
{x=MessageBox(0,"DB Return","E=0",MB_OK);};
return;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Query1PostError(TDataSet *DataSet,
EDatabaseError *E, TDataAction &Action)
{
int x=1;
if (E == 0)
{x=MessageBox(0,"DB Return","E=0",MB_OK);}
else
{x=MessageBox(0,"DB Return","E=0",MB_OK);};
return;
}
Viele Gruesse
Hans-Peter
Comment