Announcement

Collapse
No announcement yet.

Exceptions: Text erhält Zusatz "exception 1"

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

  • Exceptions: Text erhält Zusatz "exception 1"

    Hallo,
    Ich habe eine Exception angelegt. Beim Werfen der Exception (entweder direkt per SQL oder auch in in Triggern) stellt FB dem angegebenen Text ein "exception 1" inkl. Zeilenumbruch voran. Das will ich aber nicht, weil ich die Exception-Msg in meinem Programm direkt an den User weiterreichen will, da stört sowas m.E.

    Ist das ein Feature?
    Kann man das abstellen?
    Und wo wir gerade dabei sind: gibt es vllt noch andere elegante Möglichkeiten, die Überprüfung, ob das Löschen überhaupt gestattet ist, in die DB zu verlagern, inklusive Rückmeldung an den User?

    (...und das alles unter FB 1.0.3.972, Win)

    CREATE EXCEPTION EX_TEST 'Test';
    EXCEPTION EX_Test;
    Ausgabe:

    exception 1
    Test

    (in einem Bugtracking-Post hab ich gelesen, dass eigentlich "exception test" ausgegeben werden sollte anstatt der "1". Fänd ich aber auch nicht gut)

    Grüße,
    Martin

  • #2
    Hallo Martin,
    das höre ich ehrlich gesagt das erste mal. Du bist Dir sicher, dass das "exception 1" nicht von irgendwo sonst herkommt? Mit welchem Tool bekommst Du diese Ausgabe?
    <br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hallo,
      in meinem Programm verwende ich ein IBDataSet (aus BCB 6):

      try
      {
      IBDataSet1->Delete();
      // (Anmerkung: Der Trigger für die Delete-Operation wirft diese
      // Exception).
      }
      catch(EIBError &e)
      {
      ShowMessage(e.Message);
      }

      Auch IBConsole (von 2001) liefert die Meldung so wie beschrieben (wahrscheinlich, weil die Entwickler eben auch diese Komponenten benutzt haben?!)

      Ich habs auch mal mit der SQLConsole (über FB-ODBC-Driver) probiert, da liefert ein Delete-Versuch folgende Ausgabe:

      Server Msg: 335544517, State: HY000, exception 1
      Dies ist ein Test.

      Marti

      Comment


      • #4
        Hallo #,

        Erzeuge mal eine andere Exception zuerst,
        dann deine hier.
        Es könnte sein, dass dann die 2 steht als Nummer der Exception intern.

        Probier mal die 1.5 aus.
        Ich glaube das stand als Fehler in einer der Release-Notes.

        Heik

        Comment


        • #5
          Hallo Martin,
          <br>
          Deinem Beispiel zufolge und der Tatsache, dass IBConsole das selbe Ergebnis liefert, wird es wohl an den Zugriffskomponenten IBX liegen.
          <br>
          Was passiert, wenn Du den Aufruf der Exception in eine Stored Procedure packst und diese Stored Procedure in <b>isql</b> aufrufst?
          <br>
          Thoma
          Thomas Steinmaurer

          Firebird Foundation Committee Member
          Upscene Productions - Database Tools for Developers
          Mein Blog

          Comment


          • #6
            Hallo,
            erstmal Danke fürs Mitdenken.
            Ich habe noch einmal ein paar Tests gemacht. Die "1" ist die interne Exception ID, wie sie z.B. auch vom IBExpert-Tool so genannt und angezeigt wird. IBExpert erzeugt übrigens folgende Ausgabe beim Auslösen der Exception:

            (Leerzeile)
            Dies ist ein Test.

            Also bis auf die Leerzeile korrekt.
            Unter IBConsole und in meinem Programm bekomme ich allerdings leider mit allen Server-Versionen (IB6.0 / FB1.0.3 / FB 1.5.2) das selbe oben beschriebene Ergebnis.

            isql liefert übrigens folgende Ausgabe, wenn die Exception in einer stored procedure aufgerufen wird:
            Statement failed, SQLCODE = -836

            exception 1
            -Dies ist ein Test

            Folgender "Trick" klappt auch nicht: Wenn ich in meinen Trigger statt den direkten Aufruf der Exception die Stored Procedure aufrufe (die ja wiederum die Exception wirft), erhalte ich in meinem Programm auch die Ausgabe mit "exception 1".

            Dies alles tritt wohlgemerkt nur bei user-definierten exceptions auf. Es sieht so aus, als ob das an dem Zugriff über IBX liegen würde, wobei ich mich dann wundere, dass das Problem unbekannt ist. Also ich hab keine Idee mehr!*

            Gruß,
            martin

            *Als "workaround" habe ich mir überlegt, das "exception X" in einer Funktion rauszufiltern

            Comment


            • #7
              Hallo,

              ich weiß zwar nicht, ob die Antwort noch gebraucht wird,....

              Ich habe dieses Verhalten auch. Ich hatte es aber nicht als Fehler betrachtet, sondern dachte, es muss so sein.

              Jedenfalls untersuche ich im Programm (bei mir Delphi, bei Dir wahrscheinlich C) den Text von E.Message. Wenn das Wort "exception" drin auftaucht, weiß ich, dass es eine benutzerdefinierte Exception ist und entferne einfach die erste Zeile incl. Zeilenumbruch, den Rest kann ich direkt dem Benutzer anzeigen.
              Wenn z.B. "violation of" auftaucht, dann ist irgendein Primary Key, Foreign Key oder sonstiger Constraint verletzt, dann zeige ich dem Benutzer eine aussagekräftige Meldung an, die er auch versteht.

              Ich nutze das also zur Unterscheidung, welche Art Exception aufgetreten ist. Von daher finde ich es ganz nützlich.

              Schöne Grüße Dagmar

              Comment

              Working...
              X