Fragensteller
SQL Trigger Problem die 2.

Frage
-
Hallo
Nachdem wir ja nun in meinem anderen Beitrag wirklich ausführlich über mein Triggerproblem gesprochen habe und ich auch viel gelernt habe, habe ich auch nun gleich einen weiteren Trigger den ich bauen soll und hoffe das ich nun auch mit diesem Beitrag wieder einiges dazu lerne.
Folgende Problemstellung :
2 Tabellen:
Tabelle ADRESS (auf die ein Trigger kommen soll) enthält :
[ADRESS_ID] ,[Adresse] ,[Adresstyp] ,[Briefanrede] ,[Anrede] ,[Vorname] ,[Name] ,[Zusatz] ,[Strasse] ,[Land] ,[PLZ] ,[Ort] ,[Telefon] ,[Telefon2] ,[Telefon3] ,[Fax] ,[EMail] ,[HomePage] ,[Firma] ,[Funktion] ,[Abteilung] ,[Prioritaet] ,[Verweis] ,[ILNNummer] ,[Vorgaenger] ,[TS]
Tabelle BELEG enthält :
Die letzten Einträge in der Tabelle Beleg habe ich selber angelegt[BELEG_ID] ,[Belegtyp] ,[Belegnummer] ,[Datum] ,[Adressnummer] ,[Name] ,[Anrede] ,[Vorname] ,[Zusatz] ,[Strasse] ,[Land] ,[Plz] ,[Ort] ,[BankVerb] ,[KasseBank] ,[Barverkauf] ,[Gedruckt] ,[Preisgruppe] ,[PreisTyp] ,[Rabattgruppe] ,[Belegrabatt] ,[Zahlungsbedingung] ,[Zahlungsziel] ,[Zahlungszieltyp] ,[ESRReferenznummer] ,[Skontotage1] ,[Skontotage1typ] ,[Skontoprozent1] ,[Skontotage2] ,[Skontotage2typ] ,[Skontoprozent2] ,[Mitarbeiter] ,[Vertreter] ,[Lager] ,[Ansprechpartner] ,[Waehrungscode] ,[Waehrungsfaktor] ,[Lieferbedingung] ,[LText1] ,[LText2] ,[Brutto] ,[Netto] ,[Steuer] ,[FremdwaehrungBrutto] ,[FremdwaehrungNetto] ,[FremdwaehrungSteuer] ,[WIR] ,[WIRProzent] ,[WIRArt] ,[Liefertermin] ,[Konto] ,[Kontengruppe] ,[Kostenstelle] ,[Status] ,[IhrZeichen] ,[UnserZeichen] ,[IhrAuftrag] ,[IhrAuftragVom] ,[Sprache] ,[Fibuexport] ,[Fibusatz] ,[LieferBelegNr] ,[FreierText1] ,[FreierText2] ,[FreieZahl1] ,[FreieZahl2] ,[FreieZahl3] ,[FreieZahl4] ,[FreiesDatum1] ,[FreiesDatum2] ,[FreiesKennzeichen1] ,[FreiesKennzeichen2] ,[FreiesKennzeichen3] ,[FreiesKennzeichen4] ,[PCKasse] ,[PCKassenSitzung] ,[PCKasseBarZahlart] ,[PCKasseBankZahlart] ,[PCKasseBarBankbezug] ,[PCKasseBarZahlung] ,[PCKasseBar2] ,[Vertrag] ,[Vorlage] ,[RefAdresse] ,[RechAdresse] ,[Erloes] ,[ErloesEuro] ,[UebernahmeOffen] ,[AngelegtAm] ,[AngelegtVon] ,[BearbeitetAm] ,[BearbeitetVon] ,[KursTyp] ,[FixKurs] ,[EuroNetto] ,[EuroSteuer] ,[EuroBrutto] ,[EULand] ,[Verkehrszweig] ,[Gewicht] ,[Projekt] ,[RTyp] ,[ILNNummer] ,[Orignummer] ,[EDIStatus] ,[ValutaDatum] ,[WerkauftragErweitert] ,[Standort] ,[RundungPos] ,[RundungBel] ,[VerbandsKLNr] ,[DelkredereProzent] ,[Umlagerung] ,[Version] ,[TS] ,[_LANREDE] ,[_LNAME] ,[_LVORNAME] ,[_LZUSATZ] ,[_LEMAIL] ,[_LFAX] ,[_LHOMEPAGE] ,[_LLAND] ,[_LORT] ,[_LPLZ] ,[_LSTRASSE] ,[_LTELEFON] ,[_LTELEFON2] ,[_LTELEFON3]
,[_LANREDE] ,[_LNAME] ,[_LVORNAME] ,[_LZUSATZ] ,[_LEMAIL] ,[_LFAX] ,[_LHOMEPAGE] ,[_LLAND] ,[_LORT] ,[_LPLZ] ,[_LSTRASSE] ,[_LTELEFON] ,[_LTELEFON2] ,[_LTELEFON3]
Alle Antworten
-
In diese Felder sollen Einträge eingefügt werden.
Wenn in meinem Programm bei einem Auftrag, Lieferschein, Rechnung, Gutschrift, Lieferantengutschrift oder Reklamation eine abweichende Lieferadresse angegeben wird erscheint dann dieser Eintrag in der ADRESS Tabelle .
Nun soll mit Hilfe dieses Eintrages die Felder die ich in der Tabelle BELEG angelegt habe automatisch ausgefüllt werden.
In der Tabelle ADRESS gibt es ja das Feld Adresstyp hier stehen solche Einträge drin
z.B. bei einer Rechnung : QRAR052
wobei hier das AR052 die Rechnungsnummer ist und das R davor der Belegtyp
Es sollen in der Tabelle BELEG nur die Einträge betroffen sein die den Belegtyp F, L , R, G , J und D haben .
Nun bin ich mir nicht sicher ob ich einen Trigger nun auf die Tabelle BELEG oder ADRESS schreiben soll und wenn dann wie der genau auszusehen hat. Ich hoffe jemand kann mir helfen !
LG Michi
-
hi,
Die letzten Einträge in der Tabelle Beleg habe ich selber angelegt
Bei dieser Form der Tabelle und dem System in dem du arbeitest, würde ich erstmal das in einer extra Tabelle speichern und nicht in der Belegtabelle. Inhaltlich sieht es aber aus wie eine Addresse, daher die Frage: Warum überhaupt extra Felder?
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann -
hi,
die zweite Frage habe ich nicht gesehen. Daher:
Die Beschreibung legt für mich erstmal nahe mit einer View und mit Instead Of-Triggern zu arbeiten, welche die Domain Key Normal Form umsetzen.
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann -
Deinen Rat die Felder erst in einer Extra Tabelle zu speichern deute ich als Sicherheitshinweiß wobei wir uns hier keine Sorge machen müßen da es sich um eine lokale Version der Software handelt und ich hier zu Testzwecken alles verändern kann ohne das etwas passiert.
Das Programm ist mit einem Shop gekoppelt und in diesem Shop ist es nur möglich über die Belegtypen also somit auch nur über die Tabelle Beleg diese Adressen herraus zu ziehen . Am Ende soll es so sein das man im Shop die Hinterlegte (also eingefügte Adressdaten) Daten ausgibt.
-
Hallo MichiRai,
ich würde den Trigger auf die Tabelle Adress legen. Ansonsten kann der Trigger ganz normal aussehen, wie schon in dem anderen Thread beschrieben. Das einzig neue was Du n diesem Fall noch beachten musst ist die Überprüfung des Belegtypes. Dies kannst du mit dem Befehl substring durchführen.
http://msdn.microsoft.com/de-de/library/ms187748%28v=sql.90%29.aspx
In Deinem Falle ist dies:
SUBSTRING(Adresstyp, 2, 1)
Gruß Falk -
hi,
Mir hilft in solchen Fällen ein folgende, einfache Methodik: Beschreibe dein Problem präzise, ohne Fachausrücke, in einfachem, korrektem Deutsch. Wer macht was und wie sieht die Situation vorher und nacher aus? Im Grunde eine ausformulierter Use-Case. Und setze dabei nichts als Gegeben voraus.
Nun zum Kern meins Verständnisproblems: Warum soll sich überhaupt etwas am Beleg ändern, wenn eine neue Adresse / Anschrift hinzukommt? Ein Beleg ist eine dieser Entitäten, welche sich im Normalfall nicht ändern dürfen (GOB, Nachvollziebarkeit).
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann -
Diese Felder sind im Beleg nicht sichtbar sondern sind nur hier in der Tabelle Beleg mit eingefügt umd die Verbindung dieser Felder mit dem Shop zu erstellen . So das sich der Shop quasi aus dieser Tabelle die Lieferadresse des einzelnen Beleges holen kann und diesen dann ausgeben kann !
-
Hallo Michi,
solltest du Dein Anfangskonzept noch verfolgen, so müsste der Trigger ungefähr so aussehen:
CREATE TRIGGER test_trigger ON [dbo].[AdressID]
AFTER INSERT
AS
SET NOCOUNT ON ;
UPDATE I
SET LAnrede = A.Anrede,
LName = A.Name,
LVorname = A.Vorname
FROM dbo.BelegID I
INNER JOIN dbo.AdressID A ON I.Belegtyp = SUBSTRING(A.Adresstyp, 2, 1)
AND I.Belegnummer = SUBSTRING(A.Adresstyp, 3, 5)
WHERE (SUBSTRING(A.Adresstyp, 2, 1) IN ('F', 'L', 'R', 'G', 'J', 'D'))In der Where Klausel wird geprüft ob es sich um einen Deiner Belegtypen handelt bei denen die Adresse übernommen werden soll und über die INNER JOIN Anweisung wird die AdressID anhand des Adresstyps mit dem entsprechenden Belegtyp und der Belegnummer verknüpft.
Gruß Falk
XING