Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze schnell einfügen bzw. ersetzen (https://www.delphipraxis.net/180241-datensaetze-schnell-einfuegen-bzw-ersetzen.html)

messie 4. Mai 2014 11:49

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

DeddyH 4. Mai 2014 11:51

AW: Datensätze schnell einfügen bzw. ersetzen
 
UPDATE OR INSERT INTO

Sir Rufo 4. Mai 2014 11:53

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)

mkinzler 4. Mai 2014 12:44

AW: Datensätze schnell einfügen bzw. ersetzen
 
Oder wenn man etwas flexibler reagiren will MERGE

Dejan Vu 4. Mai 2014 13:34

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.

messie 4. Mai 2014 15:40

AW: Datensätze schnell einfügen bzw. ersetzen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1257886)
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.

Moin,

das ist genau der Punkt: sie sind teilweise schon da. Daher die Fragestellung.

Ich meinte den Ansatz:
Code:
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
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.
Das mit den Tabellen ist interessant. Wie bekomme ich die externe Tabelle in die DB (Beispiele, Tutorials?)

Grüße, Messie

mkinzler 4. Mai 2014 15:53

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:

Das mit den Tabellen ist interessant. Wie bekomme ich die externe Tabelle in die DB (Beispiele, Tutorials?)
http://www.delphipraxis.net/1256882-post24.html

Sir Rufo 4. Mai 2014 15:55

AW: Datensätze schnell einfügen bzw. ersetzen
 
Und wir meinten den Ansatz
Delphi-Quellcode:
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;
Etwas mehr Geschwindigkeit gibt es, wenn man sich die Parameter-Referenzen merkt, anstatt immer wieder durch
Delphi-Quellcode:
ParamByName
zu holen.

messie 4. Mai 2014 18:03

AW: Datensätze schnell einfügen bzw. ersetzen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1257897)
Und wir meinten den Ansatz
Delphi-Quellcode:
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;
Etwas mehr Geschwindigkeit gibt es, wenn man sich die Parameter-Referenzen merkt, anstatt immer wieder durch
Delphi-Quellcode:
ParamByName
zu holen.

Hm, bei dem Ansatz wird bemängelt, dass ich den primary key nicht mit übergebe. Ist das der DB_key? Den kenne ich zu dem Zeitpunkt evtl gar nicht, ebenso die ID falls sie schon da ist.

Grüße, Messie

Perlsau 4. Mai 2014 18:21

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.
Seite 1 von 4  1 23     Letzte »    

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