Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Trigger (https://www.delphipraxis.net/192701-trigger.html)

stOrM 11. Mai 2017 20:13

Datenbank: MySQL • Version: 57 • Zugriff über: Unidac

Trigger
 
Hi,
ich habe mal eine Frage zu einem Before Insert Trigger den ich gerne erstellen würde, da bekomme ich aber immer die Fehlermeldung das die Column Bezeichnung nicht existieren würde (In beiden Tabellen vorhanden und exakte Schreibweise beibehalten).
Folgendes wäre schön, wenn machbar:

Tabelle A Felder
Bezeichnung (VarChar)
ZX (Integer)

Tabelle B Felder
Bezeichnung (VarChar)
ZX (Ineger)

Jetzt wollte ich before das Insert ausgelöst wird die Bezeichnung aus Tabelle A mit der Bezeichnung aus Tabelle B vergleichen, wenn dies Übereinstimmt den Wert aus ZX von Tabelle B in Tabelle A schreiben.

Versucht hatte ich folgendes bisher (kann auch völliger Blödsinn sein, ist mein erster Trigger überhaupt):

Code:
CREATE DEFINER=`testUser`@`localhost` TRIGGER `testDB`.`jb_tabelleA_BEFORE_INSERT` BEFORE INSERT ON `jb_tabelleA` 
FOR EACH ROW
BEGIN
  SET NEW.ZX = (Select * from jb_tabelleB
  where `jb_tabelleB`.`bezeichnung` = `jb_tabelleA`.`bezeichnung`);
END

jobo 11. Mai 2017 20:37

AW: Trigger
 
mysql ist schon mal zimperlich mit den Feldnamen. Daher wird da gern immer überall mit Hochkomma gearbeitet, wie teilweise auch in Deinem Trigger zu sehen.

Naja und wenn ein Integer Wert gesetzt werden soll, dann muss das Select auch einen Integerwert ergeben.
Dein "Select *" würde vielleicht funktionieren, wenn die Quelltabelle nur eine Spalte vom Typ Integer besitzt. Also selektiere gezielt die Spalte, die Du haben willst.
Ob der Trigger ansonsten funktioneren kann und Sinn macht, hab ich mir nicht weiter angeschaut. Vermute es steht mit Deinem anderen Thread im Zusammenhang ..

himitsu 11. Mai 2017 20:39

AW: Trigger
 
Zitat:

`jb_tabelleA`.`bezeichnung`
NEW.`bezeichnung` :?:



Zitat:

Select * from
Select ZX from

jobo 11. Mai 2017 20:42

AW: Trigger
 
Zitat:

Zitat von himitsu (Beitrag 1371063)
Zitat:

`jb_tabelleA`.`bezeichnung`
NEW.`bezeichnung` :?:



Zitat:

Select * from
Select ZX from

Genau!

nahpets 11. Mai 2017 20:45

AW: Trigger
 
Ist das denn ein gültiges Select?

Delphi-Quellcode:
Select * from jb_tabelleB where `jb_tabelleB`.`bezeichnung` = jb_tabelleA`.`bezeichnung`;

Sprich: lässt sich das außerhalb eines Triggers fehlerfrei ausführen?

Da hätte ich jetzt erstmal sowas vermutet:

Delphi-Quellcode:
Select b.* from jb_tabelleB b, jb_tabelleA a where a.bezeichnung = b.bezeichnung;


Sind die ` bei MySQL wirklich erforderlich?

Abgesehen davon kann ich an dem Inhalt des Triggers erstmal keinen für mich erahnbaren Sinn erkennen.

Was ist ZX? Ein Integer?
Und der soll den vollständigen Inhalt einer Abfrage aufnehmen?

Ein paar Ansätze zu der Aufgabenstellung sind eventuell hier zu finden:

http://stackoverflow.com/questions/3...-in-a-variable

stOrM 11. Mai 2017 21:08

AW: Trigger
 
Zitat:

Zitat von nahpets (Beitrag 1371066)
Ist das denn ein gültiges Select?

Delphi-Quellcode:
Select * from jb_tabelleB where `jb_tabelleB`.`bezeichnung` = jb_tabelleA`.`bezeichnung`;

Sprich: lässt sich das außerhalb eines Triggers fehlerfrei ausführen?

Da hätte ich jetzt erstmal sowas vermutet:

Delphi-Quellcode:
Select b.* from jb_tabelleB b, jb_tabelleA a where a.bezeichnung = b.bezeichnung;


Sind die ` bei MySQL wirklich erforderlich?

Abgesehen davon kann ich an dem Inhalt des Triggers erstmal keinen für mich erahnbaren Sinn erkennen.

Was ist ZX? Ein Integer?
Und der soll den vollständigen Inhalt einer Abfrage aufnehmen?

Ein paar Ansätze zu der Aufgabenstellung sind eventuell hier zu finden:

http://stackoverflow.com/questions/3...-in-a-variable


Die Feldtypen ergeben sich, wenn du im Eingangspost mal schaust was in den Klammern neben den Feldbezeichnern steht.:-D
Ich dachte es wäre klar was passieren soll in Tabelle A wird ein neuer Datensatz angelegt... Der Trigger schaut in Tablee B nach dem Bezeichner ist der Identisch nimm den Wert der in Tabelle B in ZX steht und hau den in Tabelle A im Feld ZX rein

nahpets 11. Mai 2017 21:18

AW: Trigger
 
Ja schon klar, das gibt Dein Select im Trigger aber nicht her.
SQL-Code:
SET NEW.ZX = (Select HierMussDieAuszuwählendeSpalteStehen from jb_tabelleB
  where `jb_tabelleB`.`bezeichnung` = New.WomitNachgeschautWerdenSoll);
Vermutlich also sowas:
SQL-Code:
SET NEW.ZX = (Select ZX from jb_tabelleB
  where `jb_tabelleB`.`bezeichnung` = New.Bezeichnung);

stOrM 11. Mai 2017 21:34

AW: Trigger
 
Zitat:

Zitat von nahpets (Beitrag 1371072)
Ja schon klar, das gibt Dein Select im Trigger aber nicht her.
SQL-Code:
SET NEW.ZX = (Select HierMussDieAuszuwählendeSpalteStehen from jb_tabelleB
  where `jb_tabelleB`.`bezeichnung` = New.WomitNachgeschautWerdenSoll);
Vermutlich also sowas:
SQL-Code:
SET NEW.ZX = (Select ZX from jb_tabelleB
  where `jb_tabelleB`.`bezeichnung` = New.Bezeichnung);

Hm Ok, jetzt hab ich deine Variante probiert in der Tat kein Fehler mehr, allerdings wird das ZX Feld in Tabelle A nicht mit dem aus Tabelle B gefüttert :shock:

nahpets 11. Mai 2017 21:36

AW: Trigger
 
Liefert das SQL denn außerhalb des Triggers das gewünschte Ergebnis?

stOrM 11. Mai 2017 21:39

AW: Trigger
 
Zitat:

Zitat von nahpets (Beitrag 1371075)
Liefert das SQL denn außerhalb des Triggers das gewünschte Ergebnis?

Das ist etwas schwierig ich hab da wenn ich etwas zurück bekommen will einen right join gebastelt, dann kommt auch was zurück (Sorry für mich ist das ganze DB Zeugs extremes Neuland, kann sein das ich mich etwas umständlich anstelle)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz