Announcement

Collapse
No announcement yet.

Es ist zum Heulen.

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

  • Es ist zum Heulen.

    Hallo

    Nach all dem Generve mit IBX/IB6 und der Sichtbarkeit von Feldwerten in Abhängigkeit dazu, wo diese generiert wurden, bin ich dazu übergegangen, alle Felder applikationsseitig in der AfterInsert-Routine mit benötigten Werten zu belegen. Nicht schön, aber funktionierte. Bis jetzt. Nun taucht wie aus dem Nichts folgendes Problem auf:

    Gegeben sei eine Tabelle mit den Feldern ID( =PK ), A, B, und C. Nach einem Insert werden die Felder über Editset.FieldByname('..').AsXXX belegt. Nach Post finde ich in der DB den erzeugten Datensatz auch wieder ( kontrolliert über IBConsole ). Leider enthält das Feld A nicht den von mir vorgegeben Wert, sondern ist NULL. Die anderen Felder enthalten die erwarteten Werte. Meine Applikation erzeugt keine Exception, die gesetzten Werte sind über FieldbyName auch lesbar ( auch A ) usw. A dient in der SelectSQL-Anweisung als Referenz auf eine Mastertabelle.

    Recht betrüblich zu erfahren, dass IBX offensichtlich nach seinem Gusto entscheidet, welcher Wert denn nun tatsächlich in der DB abgelegt werden soll.

    Verpasse ich der Spalte A in der DB ein Constraint not NULL, so erzeugt meine Applikation wie erwartet eine Exception.

    Ich verwende z.Zt. IBX 4.42

    Wer weiss Rat ??

    P.S.: Dieses Problem taucht mit unterschiedlichen Feldern auf. Es kann ausgeschlossen werden, dass es in meiner Applikation 'deinitialisiert' wird.

    Gruß Gesine

  • #2
    Hallo,

    Fehler gefunden.

    Die 'inkontinenten' Felder tauchten nicht in meiner InsertSQL Anweisung auf. Nachdem ich sie dort nachgesetzt habe, wird auch deren Wert abgelegt.

    Da gaukelt TIBDataSet einem doch vor, es würde durch die 'Integration' einzelner SQL-Statements auch intern für das Abfangen von Inkonsistenzen sorgen. Stattdessen sind die einzelnen SQL-Blöcke nur stumpf drangebackt.

    Offensichtlich wird nur anhand des ModifySQL-Statements überprüft, ob ein Feld mittels Fieldbyname gefüllt werden kann. Da meine Problemspalte A dort auch auftaucht, erzeugt die Benutzung von FieldbyName auch keine Exception. Transparenterweise, werden so Feldwerte für neue Datensätze zwar klaglos entgegengenommen, aber nicht abgelegt sondern einfach 'verschluckt'.

    Gruß Gesin

    Comment


    • #3
      Hallo,

      in der nächsten Ausgabe von DER ENTWICKLER ist ein Beitrag, der sich mit den Stolperstellen (man kann auch ruhig "Abgründe" dazu sagen) beim Thema InterBase 6 + IBX befasst. Beim Lesen werden dem einen oder anderen sicherlich die Haare zu Berge stehen, aber getreu der Lebensweisheit "Gefahr erkannt - Gefahr gebannt" lässt sich fast jedes IBX-Problem umschiffen. Man muss sich eben nur daran gewöhnen, dass es in den stürmischen OPEN SOURCE-Gewässern nicht mehr so ruhig und harmlos wie bei der BDE zugeht :-(

      Leider (oder zum Glück, je nachdem, von welcher Seite man es betrachtet) gibt es dann noch jeden Monat ein neues IBX-Patch

      Comment


      • #4
        Hallo Andreas,

        1)
        Das werde ich gespannt lesen.

        2)
        Na IB befindet sich ja nun erst seit wenigen Wochen in 'stürmischen' Gewässern. Unter Linux kann ich bis heute nicht's stürmisches an OpenSource finden ( Man denke z.B. an den Entwicklungszeitraum vom 2.3er bis zum 2.4 Kernel). Und harmlos ist auch nicht gerade das erste Wort, welches mir zur BDE einfällt. ;-).

        Gruß Gesin

        Comment

        Working...
        X