Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Datensätze schnell einfügen bzw. ersetzen
Moin,
ich habe größere Datenmengen, die ich gerne schneller als bisher in eine Tabelle einfügen möchte. Shmia hat so etwas hier beschrieben. Bei mir kann es aber sein, dass die Daten schon vorhanden sind: vorhandene müssen überschrieben, neue angehängt werden. Kann man das als Einstellung mitgeben (z.B. "Insert or Replace")? Grüße, Messie |
AW: Datensätze schnell einfügen bzw. ersetzen
|
AW: Datensätze schnell einfügen bzw. ersetzen
Suchst du sowas?
http://www.firebirdsql.org/refdocs/l...or-insert.html @deddyH :mrgreen: (kein roter Kasten) |
AW: Datensätze schnell einfügen bzw. ersetzen
Oder wenn man etwas flexibler reagiren will MERGE
|
AW: Datensätze schnell einfügen bzw. ersetzen
Sind die Daten denn überhaupt schon in der Datenbank? Wenn Du auf shmia's Beitrag verweist, sieht das noch nicht so aus.
Tipp: Firebird kann sehr gut mit externen Tabellen im Textformat umgehen, eigentlich genauso wie mit einer Tabelle in der DB. Das, kombiniert mit den beiden Tipps, sollte deine Aufgabe optimal lösen. |
AW: Datensätze schnell einfügen bzw. ersetzen
Zitat:
das ist genau der Punkt: sie sind teilweise schon da. Daher die Fragestellung. Ich meinte den Ansatz:
Code:
Der würde bei den vorhandenen Daten evtl. doppelte Datensätze erzeugen. Und da ist die Frage, ob man der Query ein Merge-Verhalten mit auf den Weg geben kann.
Query1.SQL.Text := 'SELECT * FROM '+tablename+' WHERE 0=1';
Query1.Open; // liefert ein leere Datenmenge Query1.Append; // Einfügemodus Query1['feld1'] := ... Query1['feld2'] := ... Query1.Post; // Daten abschicken Das mit den Tabellen ist interessant. Wie bekomme ich die externe Tabelle in die DB (Beispiele, Tutorials?) Grüße, Messie |
AW: Datensätze schnell einfügen bzw. ersetzen
Jein, man könnte aber die UpdateSQL-Eigenschaft oder die des Updateobjekts mit einem 'UPDATE OR INSERT INTO'-Statement belegen.
Zitat:
|
AW: Datensätze schnell einfügen bzw. ersetzen
Und wir meinten den Ansatz
Delphi-Quellcode:
Etwas mehr Geschwindigkeit gibt es, wenn man sich die Parameter-Referenzen merkt, anstatt immer wieder durch
Query1.SQL.Text := 'UPDATE OR INSERT INTO table1 (Field1,Field2) VALUES (:Field1,:Field2)';
// das hier in einer Schleife ausführen Query1.ParamByName('Field1').Value := ... Query1.ParamByName('Field2').Value := ... ... Query1.ExecSQL;
Delphi-Quellcode:
zu holen.
ParamByName
|
AW: Datensätze schnell einfügen bzw. ersetzen
Zitat:
Grüße, Messie |
AW: Datensätze schnell einfügen bzw. ersetzen
Den Primary-Key setzt man gewöhnlich auf AutoInc und erzeugt den entsprechenden Key-Generator sowie die dazugehörige Stored Procedure nebst Trigger. Dann muß man ihn beim Insert nicht mitgeben. Im TIBCQuery stellt man dann das Property KeyFields auf den Primary Key und KeyGenerator auf den erzeugten Generator, damit der beim Insert aufgerufen wird und einen neuen Primary Key erzeugt und einträgt. Wenn du deine Tabelle mit IbExpert erzeugst, kannst du AutoInc, Generator, Procedure und Trigger automatisch erzeugen lassen.
Zeig doch mal deine Tabellenstruktur ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz