Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird - nur neue Daten übernehmen - bessere Möglichkeit ? (https://www.delphipraxis.net/48390-firebird-nur-neue-daten-uebernehmen-bessere-moeglichkeit.html)

th_bone 24. Jun 2005 13:21

Datenbank: Firebird • Version: 1.5 • Zugriff über: FipPlus für D2005

Firebird - nur neue Daten übernehmen - bessere Möglichkeit ?
 
Hallo,

ich rufe zeitgesteuert überlappende Datenabschnitte ab und will nur die Datenteile speichern,
die noch nicht in der Datenbank vorhanden sind, um so eine lückenlose Datenreihe zu erhalten

bisher habe ich die Daten über folgende Abfrage auf ihr vorhandensein überprüft:

Delphi-Quellcode:
if (Locate('SYMBOLID;MIN_DATE;MIN_TIME',
 VarArrayOf([inttostr(symboldataset.FieldByName('SYMBOLID').AsInteger),
 datetostr(mydate),inttostr(myminute)]),Searchoptions ))=false then begin

append;

... Daten schreiben ...

end;
das funktioniert auch soweit - aber ich habe den eindruck das dies bei zunehmenden Datenbestand extrem langsam wird (>400000 Datensätze).

deshalb meine Frage gibt es noch andere möglichkeiten die abfrage zu beschleunigen (indeces sind natürlich schon vorhanden).

Bin leider noch nicht so fit was DB programmierung angeht und vielleicht ist mein weg auch zu umständlich

Danke für alle tips

Ralf

UweR 24. Jun 2005 15:33

Re: Firebird - nur neue Daten übernehmen - bessere Möglichke
 
Hallo Ralf,

der Locate-Befehl läuft auf jeden Fall erst mal lokal auf den Daten die bei dir im DataSet stehen und nicht auf der Datenbank. Inwieweit FibPlus da die Indizes berücksichtigt kann ich dir nicht sagen. Was noch sein ist das nach jedem Einfügen eines Datensatzes dieser wieder per Refresh geholt wird und das möglicherweise sogar ein refresh auf den gesamten Dataset gemacht wird. Das kannst du aber u.U. in den Optionen zum Dataset abstellen, ich habe aber gerade nicht parat wo.

Ich würde da nicht mit Locate arbeiten sondern mir einen Dataset erstellen der direkt leer ist wenn die Daten noch nicht in der Datenbank stehen und dann ein SQL-Statement aufrufen was mir diese einträgt. Noch heschickter wäre das natürlich in einer StoredProcedure verpackt, das ist aber natürlich für Jemanden der auf der Datenbankseite noch nicht so fit ist noch einen Tick schwieriger, aber man soll ja auch keiner Herausforderung aus dem Weg gehen.

kiar 24. Jun 2005 15:56

Re: Firebird - nur neue Daten übernehmen - bessere Möglichke
 
Hallo th_bone,

hast du schon mal die Suche im Forum benutzt und nach Insert und Update gesucht, da werden dir jede Menge Möglichkeiten geboten, dies über eine Stored Procedure zu machen.

raik


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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