AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird - nur neue Daten übernehmen - bessere Möglichkeit ?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von th_bone · begonnen am 24. Jun 2005 · letzter Beitrag vom 24. Jun 2005
Antwort Antwort
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#1

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

  Alt 24. Jun 2005, 14:21
Datenbank: Firebird • Version: 1.5 • Zugriff über: FipPlus für D2005
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
  Mit Zitat antworten Zitat
UweR

Registriert seit: 15. Mär 2004
Ort: Bad Marienberg
219 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 24. Jun 2005, 16:33
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.
Gruß
UweR
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#3

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

  Alt 24. Jun 2005, 16:56
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
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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