Datensätze von Tabelle1 in Tabelle2 verschieben

Mein Problem:

Ich will eine Datenbank zur internen Auftragserstellen erstellen.
Dafür habe ich zwei Tabellen erstellt, die mit einander in einer 1:n Beziehung stehen (Auftrage_Kopf und Aufträge_Details).

Die Daten werden zunächst bei der Eingabe im Formular unter Temp_Aufträge_Kopf und Temp_Aufträge_Details gespeichert.

Wenn der User auf einen Button „neuen Auftrag speichern“ drückt, sollen die Daten aus den Temp Tabellen in die „richtigen“ Tabellen kopiert werden.

Hab leider gar keinen Schimmer wie ich das anstellen soll und bin für Tipps in alle Richtungen dankbar

Kai

angenommen, dein auftrag hat eine nummer als primärschlüssel, dann müsste es so gehen

primärschlüssel des auftrags ist „4711“

insert into Auftrage_Kopf
select * from Temp_Aufträge_Kopf
where nr = 4711 ;

insert into Aufträge_Details
select * from Temp_Aufträge_Details
where auftragsnr = 4711 ;

(wobei „nr“ der primärschlüssel des auftrags und „auftragsnr“ der fremdschlüssel der detailstabelle auf den auftrag ist).

ganz easy - ausser deine db-engine unterstützt das nicht - aber da du nicht angegeben hast, auf was für einem system du arbeitest, kann ich dir in dieser hinsicht nicht helfen

DAHER IMMER ANGEBEN, MIT WELCHER SOFTWARE DU ARBEITEST!!! spart 'ne menge mühe…

erwin rockenbauer

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

angenommen, dein auftrag hat eine nummer als primärschlüssel,
dann müsste es so gehen

primärschlüssel des auftrags ist „4711“

insert into Auftrage_Kopf
select * from Temp_Aufträge_Kopf
where nr = 4711 ;

insert into Aufträge_Details
select * from Temp_Aufträge_Details
where auftragsnr = 4711 ;

(wobei „nr“ der primärschlüssel des auftrags und „auftragsnr“
der fremdschlüssel der detailstabelle auf den auftrag ist).

ganz easy - ausser deine db-engine unterstützt das nicht -
aber da du nicht angegeben hast, auf was für einem system du
arbeitest, kann ich dir in dieser hinsicht nicht helfen

DAHER IMMER ANGEBEN, MIT WELCHER SOFTWARE DU ARBEITEST!!!
spart 'ne menge mühe…

erwin rockenbauer

Vielen Dank schon mal, hat mich leider nicht wirklich weiter gebracht.

Ich arbeite mit Access 97 nicht 2000 (!!!)

muss ich da mit Recordsets arbeiten??
Wie muss ich genau die „SQL“ Anweisung angeben, die Du oben genannt hast?

Wenn ich normal im Code Editor insert into… eingebe, dann mault er schon rum ihm fehlt das Wort „Case“.
Aber eine SELECT… CASE Anwendung will ich ja gar nicht ;o)

Kai

das ist mal 'ne gute aussage: „ich arbeite mit access 97 und nicht mit 2000“. so nach dem motto: „gibt’s auch noch was anderes???“.

verzeih eine kleine überheblichkeit, aber ich arbeite normalerweise mit ECHTEN datenbanken und nicht mit spielzeug-datenverwaltungsprogrämmchen…

aber gut - unter access 97 gehe folgendermassen vor:

  • erstelle eine neue abfrage
  • als abzufragende tabelle wähle jene aus,
    aus der du die daten kopieren möchtest
    (also z.b. die Temp_Aufträge_Kopf)
  • als abfragetyp stelle „anfügeabfrage“ ein
    (menü abfrage!)
  • im darauffolgenden dialog wähle jene tabelle aus,
    an die du die daten anhängen willst
    (also z.b. die Auftrage_Kopf)
  • die abfrage formuliere einfach so, dass du
    a) alle felder einzeln auswählst
    b) als kriterium in der primärschlüsselspalte
    die auftragsnummer eingibst
    (also z.b. in der spalte nr das kriterium „=4711“
  • führe diese abfrage durch, und du wirst sehen, dass sie
    genau das macht, wass du willst
  • speichere die abfrage ab
  • du solltest diese abfrage aus jedem modul oder makro
    starten können
  • mache das selbe mit der detail-tabelle

alles klar nun?

erwin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Kai,
Erwins Antwort war korrekt; ergänzend kann man sagen, daß das SQL-Statement direkt im Abfrageentwurf eingegeben werden kann.
Erstelle einen neue Abfrage in der Entwurfsansicht, bei der Tabellenauswahl klicke auf Abbrechen, schalte ganz oben links auf die SQL-Ansicht um, und hoppla! Da kannst Du den Text eingeben, z.B. eins von den beiden Statenements unten.

Gruß

J.

insert into Auftrage_Kopf
select * from Temp_Aufträge_Kopf
where nr = 4711 ;

insert into Aufträge_Details
select * from Temp_Aufträge_Details
where auftragsnr = 4711 ;