![]() |
Datenbank: InterBase • Version: 7.5 • Zugriff über: TIBDataSet
Delphi, Interbase, Trigger und Stored PROBLEM
Hi,
es ist Neuland für mich mit InterBase zu arbeiten und habe da ein Problem. Meine (zur Zeit^^) eine Tabelle greift über TIBDataSet auf die Interbase zu. Meine Frage ist: Wie kann ich vom Delphi aus eine Stored Procedure ausführen (und wie müßte sie aussehen), die wiederrum einen Trigger aktiviert und ich die Daten aus dem Trigger in meiner Tabelle beim Insert zu sehen bekomme?? Bin für jeden Tipp dankbar! Viele Grüsse Andreas Mein Trigger:
SQL-Code:
[edit=mkinzler]SQL-Tag ergänzt Mfg, mkinzler[/edit]
SET TERM ^ ;
/* Triggers only will work for SQL triggers */ CREATE TRIGGER "TRIGKDANSCHRFIT" FOR "KDRECHANSCHRIFT" ACTIVE BEFORE INSERT POSITION 0 as begin "KDRECHANSCHRIFT"."KDRECHANREDE" = 0; "KDRECHANSCHRIFT"."KDRECHABTEILUNG" =0; "KDRECHANSCHRIFT"."KDRECHCOUNTRY" =0; "KDRECHANSCHRIFT"."KDRECHMWST" = True; "KDRECHANSCHRIFT"."KDRECHORT" =0; "KDRECHANSCHRIFT"."KDRECHSTRASSE" =0; "KDRECHANSCHRIFT"."KDRECHZAHLUNGSART" =0; IF ("KDRECHANSCHRIFT"."KDRECHID" IS NULL) THEN "KDRECHANSCHRIFT"."KDRECHID" = GEN_ID(Genkdanschrift, 1); end ^ COMMIT WORK ^ SET TERM ;^ |
Re: Delphi, Interbase, Trigger und Stored PROBLEM
Häh? Wieso brauchst Du denn eine Stored Procedure?
Dieser Trigger wird automatisch ausgeführt, sobald in die Tabelle KDRECHANSCHRIFT ein Datensatz eingefügt wird. Aus Deiner Delphi-Anwendung kannst Du also einfach ein INSERT auf die Tabelle machen. Du brauchst keine Stored Procedure dafür. |
Re: Delphi, Interbase, Trigger und Stored PROBLEM
Ja, schon richtig. Du bekommst diese Daten aber nicht sofort zu sehen (ganz wichtig mein Wert vom GEN_ID), erst nach POST.
Glaub Hr Kosch hat da schon mal ein Tipp gegeben und sagte eine Stored Procedure würde da helfen. |
Re: Delphi, Interbase, Trigger und Stored PROBLEM
Das liegt aber eher daran dass Dein Dataset nicht mitbekommt, dass sich die Daten beim insert nochmal geändert haben. Ich glaube Holger hat sich mal so richtig kräftig über das Caching vom TIBDataSet aufgeregt (oder war es ne andere Komponente?).
Versuch einfach mal, den Datensatz nach dem Insert nochmal explizit von der Datenbank zu laden. |
Re: Delphi, Interbase, Trigger und Stored PROBLEM
Zitat:
SQL-Code:
liefert den Generator (und erhöht ihn um 1).
select gen_id(generatorname, 1) from rdb$database
Man braucht keine Stored Procedure, sondern weist den per Select erhaltenen Wert einfach dem Parameter der Insert-Query zu (bzw. über das OnNewRecord-Event eines Datasets dem ID-Feld). |
Re: Delphi, Interbase, Trigger und Stored PROBLEM
DANKE!! :firejump:
Wieder dazu gelernt, geht suppper gut. Eine Frage hätte ich noch, wei aber nicht ob sie hier her gehört. Habe meine Kundentabelle, die ist über Schlüsselfelder mit anderen Tabellen wie zb: Anreden, Strassen, Orte, Abteilungen, Länder und paar anderen verbunden (das funktioniert einwandfrei). Jetzt möchte ich die Daten über Lookup-Felder in meinem DBGrid anzeigen und editieren können. Wenn ich für jede Untertabelle ein Lookup-Feld einrichte, geht die Anzeige im DBGrid in den Keller (man hat das Gefühl die Software bleibt stehen, vermutlich wegen der Menge an Daten). Gibt es eine andere elegantere Lösung? |
Re: Delphi, Interbase, Trigger und Stored PROBLEM
Zitat:
zwei Dinge kann ich aber hier schon mal verraten: * editierbare Grids würde ich vermeiden, besser einen eigenen Bearbeitungsdialog oder ein Frame dafür verwenden, das einen einzigen Datensatz (den gerade im Grid selektierten) darstellt * die Lookups kann man über Sub-Selects ersetzen, dann erledigt der Datenbankserver die Arbeit |
Re: Delphi, Interbase, Trigger und Stored PROBLEM
Zitat:
Danke :feuerchen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz