![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: Dataset
Inhalt einer Firebird-Tabelle übernehmen
Hallo an Alle,
ich würde gerne aus einer temporären Firebird-Tabelle alle Daten in eine andere Tabelle der selben Datenbank kopieren. Mit
Delphi-Quellcode:
DatamoduleAuftrag.IBDataSetPositionen.Open;
DataModuleArtikelAngebot.IBDataSetArtikelTemp.Open; DataModuleArtikelAngebot.IBDataSetArtikelTemp.First; with DataModuleArtikelAngebot.IBDataSetArtikelTemp do for i := 0 to DataModuleArtikelAngebot.IBDataSetArtikelTemp.RecordCount - 1 do begin DatamoduleAuftrag.IBDataSetPositionen.Append; DatamoduleAuftrag.IBDataSetProvisionenAUFTRID.AsInteger := AuftragsId; DatamoduleAuftrag.IBDataSetPositionenPOSTIONSNUMMER.AsInteger := DataModuleArtikelAngebot.IBDataSetArtikelTempPOSTIONSNUMMER.AsInteger; DatamoduleAuftrag.IBDataSetPositionenKENNZIFFER.AsInteger := DataModuleArtikelAngebot.IBDataSetArtikelTempKENNZIFFER.AsInteger; DatamoduleAuftrag.IBDataSetPositionenARTIKELNUMMER.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempARTIKELNUMMER.AsString; DatamoduleAuftrag.IBDataSetPositionenIHREARTIKELNUMMER.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempIHREARTIKELNUMMER.AsString; DatamoduleAuftrag.IBDataSetPositionenBEZEICHNUNG.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempBEZEICHNUNG.AsString; DatamoduleAuftrag.IBDataSetPositionenHINWEIS.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempHINWEIS.AsString; DatamoduleAuftrag.IBDataSetPositionenKUNDENBEZEICHNUNG.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempKUNDENBEZEICHNUNG.AsString; DatamoduleAuftrag.IBDataSetPositionenAUFDRUCK.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempAUFDRUCK.AsString; DatamoduleAuftrag.IBDataSetPositionenFORMAT.AsInteger:= StrToInt(DataModuleArtikelAngebot.IBDataSetArtikelTempFORMAT.AsString); DatamoduleAuftrag.IBDataSetPositionenFORMATB.AsInteger:= StrToInt(DataModuleArtikelAngebot.IBDataSetArtikelTempFORMATB.AsString); DatamoduleAuftrag.IBDataSetPositionenEINHEIT.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempEINHEIT.AsString; DatamoduleAuftrag.IBDataSetPositionenBUTTONS.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempBUTTONS.AsString; DatamoduleAuftrag.IBDataSetPositionenBLATTWAREANMERKUNG.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempBLATTWAREANMERKUNG.AsString; DatamoduleAuftrag.IBDataSetPositionenBLATTWARECOMBO.AsInteger := DataModuleArtikelAngebot.IBDataSetArtikelTempBLATTWARECOMBO.AsInteger; DatamoduleAuftrag.IBDataSetPositionenAUFROLLELEGEANWEISUNG2.AsString := DataModuleArtikelAngebot.IBDataSetArtikelTempAUFROLLELEGEANWEISUNG2.AsString; end; DatamoduleAuftrag.IBDataSetPositionen.Post; if DatamoduleAuftrag.IBTransaction1.InTransaction then DatamoduleAuftrag.IBTransaction1.Commit; DatamoduleAuftrag.IBDataSetPositionen.Close; Bekomme jedoch den Fehler: "Nicht im Bearbeitungsmodus" Prozess wurde angehalten. Finde den Fehler nicht. Bitte um Hilfe. Danke, Luckner |
AW: Inhalt einer Firebird-Tabelle übernehmen
Warum das With?
es fehlt DataModuleArtikelAngebot.IBDataSetArtikelTemp.Next in der Schleife. Beim wievielten DS kommt der Fehler? Statt
Delphi-Quellcode:
besser
for i := 0 to DataModuleArtikelAngebot.IBDataSetArtikelTemp.RecordCount - 1 do
Delphi-Quellcode:
Ich würde die Kopie durch ein SQL-Statement erledigen.
while not DataModuleArtikelAngebot.IBDataSetArtikelTemp.Eof do
|
AW: Inhalt einer Firebird-Tabelle übernehmen
Grobes Vorgehen bei einer Schleife über eine Tabelle ...
Delphi-Quellcode:
In Deinem Quelltext befindet sich das Post ausserhalb der Schleife, es gehört aber zu jedem Append ein Post. Das ist in Deinem Quelltext nicht gegeben.
while not DataModuleArtikelAngebot.IBDataSetArtikelTemp.EoF do begin
DatamoduleAuftrag.IBDataSetPositionen.Append; ... Wertezuweisungen DatamoduleAuftrag.IBDataSetPositionen.Post; DataModuleArtikelAngebot.IBDataSetArtikelTemp.Next; end; Am Ende fragst Du nach, ob eine Transaktion offen ist, wenn ja, wird ein Commit gemacht. Im Quelltext wird aber keine Transaktion gestartet, so dass auch das Commit nie ausgeführt wird. Wenn die Tabellen strukturell identisch sind, dürfte ein
SQL-Code:
ausreichen und deutlich schneller sein.
insert into NeueTabelle select * from AlteTabelle
Stimmen die Strukturen nicht überein, müssen halt die Spalten aufgeführt werden, ist nur etwas Schreibarbeit, aber sicherlich deutlich weniger Aufwand, als das zu programmieren. |
AW: Inhalt einer Firebird-Tabelle übernehmen
Zu dem Hier schon gesagten noch:
Append auf Positionen und zuweisen an Provisionen?
Delphi-Quellcode:
DatamoduleAuftrag.IBDataSetPositionen.Append;
// Das ist doch die falsche Tabelle oder? DatamoduleAuftrag.IBDataSetProvisionenAUFTRID.AsInteger := AuftragsId; |
AW: Inhalt einer Firebird-Tabelle übernehmen
Danke an Euch und Fritzew, klasse gesehen. Wäre ich so schnell nicht drauf gekommen. Jetzt läuft es.
Gruß, Luckner |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 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-2025 by Thomas Breitkreuz