Announcement

Collapse
No announcement yet.

Interbase und Trigger

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

  • Interbase und Trigger

    Hallo Interbasefans
    Möchte eine komplexe Datenbankanwendung mit Interbase erstellen. Bei den ersten Versuchen stoße ich auf unerwartete Hindernisse die selbst in den Demos von Borland (csdemo.dpr und employee.gdb) auftreten:
    Um die Konsistenz der Daten zu erhalten soll die Datenbank soweit als möglich die Kontrolle übernehmen (deshalb ja Interbase, dachte ich) also im Script die Tabellen erzeugt (geht hervorragend und einfach mit dem PowerDesigner AppModeller for Delphi) dann im nächsen Schritt Trigger erzeugt die selbsttätig ID-Felder, die primaryKeys sind, mit eindeutigen Werten füllen sollen

    create generator gen_ID_Nr
    set generator gen_id_Nr to 0 */Startwert für leere DB

    create trigger tri_gen_ID_Nr for <Tabelle>
    before insert as
    begin
    new.id = gen_id(gen_Id_Nr,1)
    end

    Werden nun mit ISQL Sätze eingefügt klappt alles wie erwartet:
    ID wird automatisch hochgezählt und braucht in der INSERT Anweisung noch nicht mal berücksichtigt werden, also Testprg mit Interbase-Komponenten geschrieben. Soweit klappt alles hervorragend.
    Nun die entscheidende Frage auf die hoffentlich jemand eine Antwort hat:
    Der Versuch einen neuen Datensatz zB über ein Grid anzufügen scheitert mit der Fehlermeldung <Das Feld ID benötigt einen Wert>. Ist mir klar aber wie bringe ich Delphi bei das Füllen der Felder Interbase und seinen Triggern dies zu überlassen.
    Hoffe auf Hilfe!

  • #2
    Hallo,

    dieses Problem kann auf 3 verschiedenen Wegen gelöst werden:

    1. Es wird ein persistentes TField für die Spalte ID angelegt und im Objektinspektor wird die Eigenschaft <b>Required</b> auf False gesetzt. Somit verzichtet die VCL auf die Plausibilitätsprüfung, so das auch die Fehlermeldung "<i>Das Feld ID benötigt einen Wert</i>" nicht mehr erscheint. Allerdings bleibt die Anzeige des Feldinhalts von ID leer, da der Client zu diesem Zeitpunkt keine Information über den Wert der Spalte ID hat.

    2. Über eine Stored Procedure ruft das Programm vorher den neuen Generatorwert ab und trägt diesen bereits im Datensatzpuffer vor (OnNewRecord). In diesem Fall "kennt" die VCL den Primärschlüsselwert bereits, so das dieser Datensatz jederzeit erneut eindeutig abgefordert werden kann. Dies bedeutet jedoch auch, das der Trigger erweitert werden muss:
    <pre>
    CREATE TRIGGER Set_CustNo FOR Customer BEFORE INSERT AS
    BEGIN
    IF (NEW.CustNo IS NULL) THEN
    NEW.CustNo = GEN_ID(Gen_CustNo, 1);
    END
    </pre>

    3. Wenn die InterBase Express-Komponenten (IBX) eingesetzt werden und auch UP4Beta nachinstalliert wurde, steht die neue Eigenschaft <b>ForceRead</B> zur Verfügung. Wird nun <b>RefreshSQL</b> geeignet formuliert und entspricht die Tabellenstruktur den Anforderungen, sind die beiden anderen Alternativen unnötig. IBX wird dann automatisch den vom Trigger gesetzten Primärschlüsselwert einlesen.

    P.S: Einzelheiten zu den Alternativen 1 + 2 sind in meinem Buch <b>Client/Server Datenbankentwicklung mit Delphi</b> zu finden. Der 3. Weg ist brandneu (Beta-Phase).

    Comment


    • #3
      Hallo Andreas

      Danke für die schnelle Antwort und versprochen, ich gehe gleich los dein Buch kaufen, allerdings im Laden. Ich möchte etwas ärgerliches loswerden: Habe heute morgen bei der Hotline angerufen um von dort weitere Einzelheiten zu erfahren. Gut das ich schon gesessen habe, bekomme ich dort die Auskunft jede technische Anfrage kostet 330,00DM. Das kann doch wohl deren Ernst sein, bei einer solch mangelhaften Docu für 100,00 DM und einer schlechten Online-Hilfe?
      Werde deine Tips gleich testen. Frage (vielleciht etwas dumm) wo gibts das UP4Beta und wie stabil und sicher ist es.

      Volke

      Comment


      • #4
        Hallo Volker,

        für einen Entwickler kann die Dokumentation niemals umfassend genug sein - aber bei einer realistischen Einschätzung liefert Borland das übliche mit. Die vollständige Dokumentation ist in Online-Form vorhanden (HLP + PDF), die gedruckte Doku gegen Aufpreis ist auch bei anderen üblich.

        Die <b>Beta-Version</b> von IBX ist unter der URL ftp://ftp.interbase.com/blind/IBXDP5EBETAUP4.exe verfügbar und darf <b>erst dann</b> installiert werden, wenn das UpdatePack#1 für Delphi 5 installiert wurde. Allerdings sagt der Name BETA bereits aus, das
        noch einige neue Macken hinzugekommen sind.

        P.S: Ich richte meine Rechner immer als Dual-Boot mit Windows 98/Windows 2000 ein. Auf Windows 98 wird das deutsche Delphi 5 installiert, auf Windows 2000 die US-Version. Alle Patches und Beta-Versionen kann ich so gefahrlos in der US-Version ausprobieren (d.h. das IBXUp4Beta habe ich auch nur in der US-Installation getestet

        Comment


        • #5
          Hallo Andreas,

          habe die letzten Tage mit deinem Buch verbracht. Kurzes Urteil: höchst empfehlenswert, Prädikat wertvoll. Zur Datenbankentwicklung vielleicht dein Urteil zum Programm "Power Designer AppModeler for Delphi" der Fa. Sybase Inc. Hast du mit diesem Programm vielleicht Erfahrung und welche, gibt es vergleichbar gute Programme die preisgünstiger sind. Ich teste zur Zeit das o.a. Programm und bin begeistert. Gerade für große Datenbanken und deren Planung, Erstellung, Dokumentation und Wartung ist dieses Programm m.E. fast unverzichtbar. Nur der Preis ist eine etwas bittere Pille.

          Gruß Volke

          Comment


          • #6
            Hallo,

            meine einzigen Erfahrungen mit dieser Softwarekategorie betreffen ERWIN und sind schon 3 Jahr alt ;-) <br>
            Generell kann man sagen, das diese Tools zur Dokumentation hervorragend geeignet sind. Allerdings wird es sehr gefährlich, wenn man als Entwickler die automatisch generierte Datenbankstruktur nicht mehr vollständig überblickt und auch die generierten Scripte keiner kritischen Prüfung unterzieht. Solange man sich aber nicht auf die Fehlerfreiheit dieser Tools verlässt, sind sie immer dann hilfreich, wenn das Entwickeln von Datenmodellen zum ständigen Alltag gehört

            Comment

            Working...
            X