Insert Into und Beziehungen

F

f.k. deleted

Hi NG

kann mir einer von euch sagen wie ich eine Inset Into Anweisung schreibe bei der verschiedene Tabellen in Beziehunbg stehen müssen?
Ich bekommen diese Fehlermeldung wenn ich eine normal Insert Into Anweisung schreibe:
Microsoft OLE DB Provider for ODBC Drivers- Fehler '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle 'tbl_namen' mit diesem Datensatz in Beziehung stehen muss

Kann ich auch verstehen weil ich dem Insert Into ja nichts über die Beziehung sage.
Aber wie kann ich das schreiben das er so zu sagen ein Inner Join oder irgendein Join machen soll?

Mein SQL Code:

"INSERT INTO maps " & _
"(map_name) " & _
"VALUES ('" & map_name & "' )"

Der tut soweit.

Bin um jede Hilfe dankbar.

(Die beziehungen in der Access Datenbank solle später komplett verschwinden, wenn die ASP Abfragen funktionieren)

Besten Dank im Vorraus

Florian
 
Hi

ich habe auch Tabellen, die in einer 1:n Beziehung stehen und kann durchaus über ASP Datensätze einfügen. Man muss halt nur die Reihenfolge beachten, erst die 1 Tabelle dann die n Tabelle. Beim Löschen halt umgekehrt.
 
Hi Luzie

Danke erstmal für deine Antwort.

Kannst du mir bitte deine Abfrage mal Posten?
Damit ich ein Beispiel habe.

Danke Florian
 
Wie Du die Abfrage jetzt stellst, entweder über eine Insert-Statemant oder über ADO rs.Addnew ist eigentlich unwesentlich. Es kommt auf die Reihenfolge an, je mehr Tabelle, desto umständlicher.

Bsp.

Ich habe eine Tabelle Veranstaltungen. Diese Veranstaltungen werden von unterschiedlichen Referenten gestaltet.

Tabelle Seminare
Tabelle Referenten

Beide habe zunächst einmal rein nix gemeinsam.
Ich möchte aber in einer Abfrage alle Referenten ausgeben, die in der Veranstaltung z.b. ID=800 mitwirken.

Dies löse ich über eine Brückentabelle
Brückentabelle: Seminare_Referenten

Speichere ich jetzt eine neue Veranstaltung, wird diese korrekt eingefügt, da Haupttabelle (1). Nach dem Speichern linke ich via Redirect auf ein Formular, was mir alle Referenten in einer Listbox auflistet. Ich wähle diejenigen aus und speichere z.B. die Felder KursID=800 RefID=123 etc. in diese Brückentabelle, die sowohl mit der Veranstaltung als auch mit der Referenten-Tabelle in einer 1:n Beziehung steht. Diese Brückentabelle ist n.

Die eigentliche Abfrage/Ausgabe der Veranstaltung habe ich über den LEFT JOIN gelöst, da es sein kann, dass zum Zeitpunkt der Eingabe einer neuen Veransaltung kein aktueller Referent zur Verfügung steht.

Steht er/sie zu einem späteren Zeitpunkt zur Verfügung, speichere ich diesen Datensatz wie folgt: ich gehe wieder in mein Formular, wo ich den Referenten der Veranstaltung zuordne, wähle diesen neuen, den ich vorab eingefügt habe, aus der Listbox aus und speichere ihn/sie wieder in der Brückentabelle.

Ich hoffe, dies ist verständlich.

Ansonsten mal ein paar Infos geben, was Du möchtest, willst. Dann fallt eine Lösung doch einfacher.
 
Hi

So ich habe jetzt mal ein Insert Into Statemant gemacht.

INSERT INTO ((hauptmenu INNER JOIN untermenu ON hauptmenu.hauptmenu_id = untermenu.hauptmenu_id) INNER JOIN tbl_name ON untermenu.untermenu_id = tbl_name.untermenu_id) INNER JOIN maps ON tbl_name.tbl_name_id = maps.untermenu_id (map_name) VALUES ('as_52hours2.zip' )

Das ist das was mein Browser nicht verstehen will (schon mit werten)

Ich weiß ob das so richtig ist. Aber weil es nicht funktioniert denke ich das das falsch ist :))

Ist die Abfrage so richtig gestellt oder nicht?

Gruss Florian
 
Nein, das funktioniert nicht. Du kannst meines Wissens keine Datensätze via Access in ASP/vbScript gleichzeitig in unterschiedliche Tabellen einfügen. Du musst es nacheinander für jede Tabelle der Reihenfolge entsprechend einzeln ausführen. Eine andere Möglichkeit wäre allerdings mit Stored Procedures im MSSQL. Damit müsste man sich allerdings beschäftigen.

Eine automatisierte Möglichkeit wäre:
via ADO rs.Addnew einen Datensatz in Tabelle 1 einzuzufügen (wenn der Beziehungs-Wert z.b. die ID über Autowert generiert wird), diese ID direkt nach Eingabe wieder auszulesen und diese dann in die nächste Tabelle mittels rs.Addnew einfügen und via rs.update ausführen.

Dieser Link könnte Dir da sehr hilfreich sein.
http://www.aspheute.com/artikel/20000606.htm

Ansonsten

insert into tabelle1...
objconn.execute(SQL)
'Redirect bzw. Reload der Seite mit Auslesen der Beziehungs-ID und dann
insert into tabelle2...
objconn.execute(SQL)
...
etc.
 
Zuletzt bearbeitet:
Hi

Danke für die Antwort.
Das Problem ist, das ich in die ersten drei Tabellen nichts einfügen möchte sondern nur in die vierte Tabelle (maps).
Die anderen Tabellen kann ich nicht ändrn weil ich sonst auf der Seite nichts mehr anzeigen kann.
Diese ID´s sind fest können aber durch löschen des Menüs wieder geändert werden oder neue hinzugefügt werden.

Ich könnte zwar direkt in die Tabelle meine Daten eintragen aber ein eine neue ID dazukommt küsste ich ja den Quelltext wieder von Hand ändern und das geht leider nicht.
Das heißt die ersten drei Tabellen sind nur dazu da den richtigen Weg für das Script zu finden, damit das richtige angezeigt wird und ich neue Menüs hinzufügen kann und das die dann automatisch zugeortnet werden.

Ich werde mit den Link mal anschauen.

Danke Florian
 
Zurück