![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: C-Api
Insert + Select für mehrer Zeilen
Guten Morgen Zusammen,
ich hätte da mal wieder ein Problem...: Der Ausgang ist eine Tabelle, die wie folgt aussieht: WAAUNR(Auftagsnummer)...WAAUPO(Zusatz)...OAAGNR(Ar beitsgangNr)...undvielesmehr 1000.....................0.................10 1000.....................0.................20 1000.....................0.................30 1000.....................0.................40 1001.....................0.................10 1001.....................0.................20 1001.....................0.................30 1001.....................0.................40 1001.....................0.................50 1001.....................0.................60 In der Tabelle stehen noch weitere Informationen, aber diese hier sind jetzt nur relevant... Ich habe ein Formular, aus dem noch die Werte UserID und KdDatum(Kundenlieferdatum) kommen. Wenn jetzt ein Auftrag (WAAUNR) + WAAUPO) ausgewählt wird, dann sollen alle Datensätze dieses Auftrags in eine andere Tabelle kopiert werden, inklusive die Daten aus dem Formular. Soll dann beim Ausführen so aussehen: WAAUNR=1000 mit WAAUPO=0 und der OAAGNR(Arbeitsgang)=20 wurde ausgewählt --> ButtonClick Tabelle (Beobachten): UserID....WAAUNR....WAAUPO....OAAGNR....Datum(Tage sdatum)....KdDatum ..1............1000...........0.................10 ...........-----.............................20090320 ..1............1000...........0.................20 ...........HEUTE........................20090320 ..1............1000...........0.................30 ...........-----............................20090320 ..1............1000...........0.................40 ...........-----............................20090320 Kann mir dabei jemand helfen? Ich bin weder ein Delphi noch SQL Crack - learning by doing und wäre echt froh über unuterstützung... Vielen Dank |
Re: Insert + Select für mehrer Zeilen
Die Syntax lautet
SQL-Code:
INSERT INTO tabelle1(feld1, feld2, feld3, ...)
SELECT feld1,feld2,feld3, ... FROM tabelle2 WHERE <Bedingung> |
Re: Insert + Select für mehrer Zeilen
Wobei das so nicht normalisiert ist, aber vielleicht ist das ja auch gewollt.
|
Re: Insert + Select für mehrer Zeilen
Versteh ich Dich richtig?
Du hast das klassische Beispiel bestehend aus Artikel, Kunde und Bestellung. Deine Vorgehensweise scheint dann aber schon deutlich vom "best practice" abzuweichen. Normalerweise hat man eine Tabelle Artikel, eine Tabelle Bestellung und eine Tabelle Kunden. Jede Tabelle bekommt einen Key spendiert. Die Tabellen Artikel und Kunde sind selbsterklärend. Die Tabelle Bestellung umfasst eine BestellID, einen foreignkey auf Kunde, ein Bestelldatum und was weiss ich noch alles. Dann gibt es jetzt eine weiter Tabelle, nämlich ArtikelBestellung. Die realisiert eine n:m Relation folgendermaßen: PrimaryKey sind ArtikelNr und BestellNr, die wiederum Foreignkeys der jeweiligen Tabellen sind. In ArtikelBestellung hast Du eventuell noch eine Anzahl und Zusatzinfos. Fertig ist das Datenmodell. Wenn Du jetzt in Deinem Programm eine Bestellung anlegen möchtest, dann erzeugst Du zuerst in Deiner Tabelle Bestellung einen neuen Satz mit den nötigen Daten und dann so viele Sätze wie nötig zu den Artikeln der Bestellung in ArtikelBestellung. Und das wars. Wenn Du nun sehen willst, wer was bestellt hat, kannst Du über joins beliebige Abfragen tätigen. Edith an DeddyH: Jopp, und ich habe den roten Kasten deswegen mal bewusst ignoriert ;) Sherlock |
Re: Insert + Select für mehrer Zeilen
Das war jetzt die Langfassung meiner Aussage :lol: :thumb:
|
Re: Insert + Select für mehrer Zeilen
Hallo Zusammen,
vielen Dank für die Antworten. Das Thema ist etwas komplexer: Es geht nicht um Kunden und Bestellungen, sondern um eine interen Fertigungsauftragsverfolgung. Dabei werden die Daten einer Tabelle in stündlichem Update aus dem ERP-System überschrieben. Es ist zu berücksichtigen, ob ein Fertigungsauftrag (ab jetzt FA genannt) für einen weiteren Arbeitsgang fertiggemeldet wurde. Sollte ein Kundentermin drücken, muss ein FA beschleunigt werden und die Arbeitsvorbereitung muss ein Datum, wann der nächste Arbeitsgang (ab jetzt AG genannt)begonnen wird eintragen. Wenn beim nächsten Update der AG das Fertigzeichen hat, wird der FA in den Briefkasten für den Mitarbeiter, der für den nächsten AG verantwortlich ist geschoben, der wiederum ein Datum eintragen muus, wann dieser AG gestartet wird. Deshalb benötige ich für jeden FA eine extra Zeile mit dem unterschiedlichen AG, für die unterschiedlichen Startdatums. Und weil die Daten immer wieder überschrieben werden, muss ich die "Schlüssel" AG Nr, FA Nr etc. in eine andere Tabelle schreiben. Ich hoffe, dass das jetzt etwas verständlicher geworden ist, was ich hier vorhabe.. LG Ykcim |
Re: Insert + Select für mehrer Zeilen
Hallo nochmal.
Ich habe es jetzt wie folgt versucht:
Delphi-Quellcode:
Leider habe ich das Problem, dass in
{===================================================================================================}
//anschieben NEU procedure TFA_anschieben.Button2Click(Sender: TObject); var Cols: TCols; Rows: TRows; query:string; i:integer; LieferdatumEN1:string; LieferdatumDeu : TDate ; fs : TFormatSettings ; begin fs.DateSeparator := '.' ; fs.ShortDateFormat := 'dd.mm.yyyy' ; LieferdatumDeu := StrToDate (KdLD.Text,fs) ; LieferdatumEN1 := FormatDateTime ('YYYY-mm-dd',LieferdatumDeu) ; query:= 'select WAAUNR, WAAUPO, OAAGNR from as400 where WAAUNR= '+ FANR1.Caption+ ' and WAAUPO= ' + FANR2.Caption; MenueUnit.connect; MenueUnit.ExecQuery(DB, query, Cols, Rows); for i := 0 to length(rows) - 1 do begin query:= 'insert into beobachten (UserID, WAAUNR, WAAUPO, OAAGNR, KdDatum) values( ' + inttostr(menueunit.UserID) + ',' + rows[0,i] + ',' + rows[1,i] + ',' + rows[2,i] + ',' + #39 + KDLD.Text + #39 + ')'; MenueUnit.ExecQuery(DB, query, Cols, Rows); end; fs.DateSeparator := '.' ; fs.ShortDateFormat := 'dd.mm.yyyy' ; LieferdatumDeu := StrToDate (Menue.Datum.Caption,fs) ; LieferdatumEN1 := FormatDateTime ('YYYY-mm-dd',LieferdatumDeu) ; query:= 'insert into beobachten (Datum) values ( ' + #39+LieferdatumEN1+#39 + ') where WAAUNR= '+ FANR1.Caption + 'and WAAUPO= ' + FANR2.Caption; MenueUnit.ExecQuery(DB, query, Cols, Rows); MenueUnit.disconnect; end; {===================================================================================================}
Delphi-Quellcode:
kein Wert geschrieben wird, obwohl Werte in rows drinstehen...
for i := 0 to length(rows[0]) - 1 do
|
Re: Insert + Select für mehrer Zeilen
Okay, es lag nicht an der For-Schleife...
Mit diesem Code habe ich es nun geschafft! 8)
Delphi-Quellcode:
In diesem Sinne
procedure TFA_anschieben.Button2Click(Sender: TObject);
var Cols: TCols; Rows: TRows; query:string; i:integer; LieferdatumEN1:string; LieferdatumDeu : TDate ; fs : TFormatSettings ; begin fs.DateSeparator := '.' ; fs.ShortDateFormat := 'dd.mm.yyyy' ; LieferdatumDeu := StrToDate (KdLD.Text,fs) ; LieferdatumEN1 := FormatDateTime ('YYYY-mm-dd',LieferdatumDeu) ; query:= 'select WAAUNR, WAAUPO, OAAGNR from as400 where WAAUNR= '+ FANR1.Caption+ ' and WAAUPO= ' + FANR2.Caption; MenueUnit.connect; MenueUnit.ExecQuery(DB, query, Cols, Rows); for i := 0 to length(rows[0]) - 1 do begin query:= 'insert into beobachten (UserID, WAAUNR, WAAUPO, OAAGNR, KdDatum) values( ' + inttostr(menueunit.UserID) + ',' + rows[0,i] + ',' + rows[1,i] + ',' + rows[2,i] + ',' + #39 + LieferdatumEN1 + #39 + ')'; MenueUnit.ExecQuery(DB, query, Cols, Rows); end; //Anschiebedatum formatieren fs.DateSeparator := '.' ; fs.ShortDateFormat := 'dd.mm.yyyy' ; LieferdatumDeu := StrToDate (Menue.Datum.Caption,fs) ; LieferdatumEN1 := FormatDateTime ('YYYY-mm-dd',LieferdatumDeu) ; query:= 'Select WAAUNR, WAAUPO, OAAGNR from as400 where OATLKZ <> 9 and WAAUNR= '+ FANR1.Caption+ ' and WAAUPO= ' + FANR2.Caption + ' GROUP BY WATENR, WAAUNR ORDER BY WATENR, OAAGNR DESC'; MenueUnit.ExecQuery(DB, query, Cols, Rows); query:= 'update beobachten set Datum = ' + #39+LieferdatumEN1+#39 + ' where WAAUNR= '+ rows[0,0] + ' and WAAUPO= ' + rows[1,0] + ' and OAAGNR= ' + rows[2,0]; MenueUnit.ExecQuery(DB, query, Cols, Rows); MenueUnit.disconnect; end; {===================================================================================================} Ykcim |
Re: Insert + Select für mehrer Zeilen
Da fände ich Joachims Variante übersichtlicher, außerdem spielt die sich komplett auf dem Server ab.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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 by Thomas Breitkreuz