Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Delphi, Interbase, Trigger und Stored PROBLEM (https://www.delphipraxis.net/134773-delphi-interbase-trigger-und-stored-problem.html)

cugar 28. Mai 2009 14:56

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:
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 ;^
[edit=mkinzler]SQL-Tag ergänzt Mfg, mkinzler[/edit]

Phoenix 28. Mai 2009 15:41

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.

cugar 28. Mai 2009 15:47

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.

Phoenix 28. Mai 2009 15:50

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.

mjustin 28. Mai 2009 15:52

Re: Delphi, Interbase, Trigger und Stored PROBLEM
 
Zitat:

Zitat von cugar
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.

Den Generator kann man auch mit Delphi einfach per SQL abfragen und erhöhen(!):

SQL-Code:
select gen_id(generatorname, 1) from rdb$database
liefert den Generator (und erhöht ihn um 1).

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).

cugar 28. Mai 2009 16:12

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?

mjustin 28. Mai 2009 17:04

Re: Delphi, Interbase, Trigger und Stored PROBLEM
 
Zitat:

Zitat von cugar
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?

Neue Frage, neuer Thread :)

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

cugar 28. Mai 2009 17:43

Re: Delphi, Interbase, Trigger und Stored PROBLEM
 
Zitat:

Zitat von mjustin
* 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

Du meinst: DBGrid nur für die Anzeige der Datensätze und für die Bearbeitung ein modales Fenster? Finde ich gar nicht schlecht, damit vermeide ich einige Fehler bei der Eingabe.

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