Announcement

Collapse
No announcement yet.

Insert über TQuery; Prozess wurde angehalten (:-(

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Insert über TQuery; Prozess wurde angehalten (:-(

    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

  • #2
    Nachtrag zu meinem Problem
    Sorry hatte nicht gedacht, daß mein "Experimental-Code" so schwer lesbar ankommt. Das direkte kopieren ist ihm nicht gut bekommen,

    Hans-Peter Fricke

    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,"DBReturn","E=0",MB_OK);
    } else
    {
    x=MessageBox(0,"DBReturn","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;

    Comment


    • #3
      Hallo zusammen,
      Mein Problem hab ich zwischenzeitlich selbst auf die Reihe gekriegt.
      1) Einstellung des Compilers: unter tools lässt sich der Debugger so einstellen, daß es nicht zum Stopp der Anwendung bei exceptions kommt.
      2) Beim Aufruf der zum catch(Exception &E) gehörenden Anweisungsblock lassen sich die genauen Fehlermeldungen über den Pointer "Exceptions &E" ermitteln.

      Wenn ich etwas schlauer gewesen wär hätt ich mich gleich etwas tiefer mit dem entsprechenden Buch aus dem Verlag "derentwickler" beschäftigt. Dann hätt ich das Problem wesentlich schneller gefunden.

      Viele Gruesse
      Hans-Peter Frick

      Comment

      Working...
      X