AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Massendaten ständig aktualisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Massendaten ständig aktualisieren

Ein Thema von Piro · begonnen am 4. Dez 2010 · letzter Beitrag vom 6. Dez 2010
 
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

Massendaten ständig aktualisieren

  Alt 4. Dez 2010, 22:22
Datenbank: MS SQL Express • Version: 2005 • Zugriff über: ADO
Moin zusammen,

in einem anderen Thread, den ich eröffnet habe, habe ich gelernt, dass ein INSERT besser und vorallem schneller als ein Append ist.

Jetzt habe ich aber ca. 100.000 Datensätze schon in der Datenbank, welche jeden Tag aktualisiert werden(hinzufügen oder ändern).

Für ein reines Hinzufügen verwende ich ein TADOCommand mit Prepared und Parameter. Geht verdammt schnell. Will ich nicht drauf verzichten.

Meine Situation:
1. Lese Daten aus einer Textdatei (ca. 100.000)
2. Abgleich gegen die bestehenden Daten -> wenn verhanden aktualisieren, wenn nicht hinzufügen

Folgenden Code habe ich bis jetzt.
Delphi-Quellcode:
...
if FileExists(filename) = True then
begin
  AssignFile(F, filename);
  Reset(F);

  SQLCommand_INSERT.CommandText := 'INSERT Into hostliste_data (ktr, znr, motor, snr, quelle, importdatum) ' +
                                                       'VALUES (:p0, :p1, :p2, :p3, :p4, :p5);';
  SQLCommand_INSERT.Prepared;

  while not EoF(F) do
  begin
    Readln(F, zeile);
    sl_zeile := Split(zeile,';', True);

    DSData.Close;
    DSData.CommandText := 'select * from hostliste_data where ktr = '+QuotedStr(sl_zeile[0])+' and ' +
                                                             'znr = '+QuotedStr(sl_zeile[1])+' and ' +
                                                             'snr = '+QuotedStr(sl_zeile[3])+' and ' +
                                                             'quelle = '+ QuotedStr(quelle);
    DSData.Open;
    id := DSData.FieldByName('id').AsString;

    if id <> 'then
    begin
      SQLCommand_UPDATE.CommandText := 'UPDATE hostliste_data ' +
                                         'SET ktr = '+QuotedStr(sl_zeile[0])+','+
                                             'znr = '+QuotedStr(sl_zeile[1])+', '+
                                         ...
                                       'WHERE id = ' + QuotedStr(id);
      SQLCommand_UPDATE.Prepared;
      SQLCommand_UPDATE.Execute;
    end
    else
    begin
      SQLCommand_INSERT.Parameters[0].Value := sl_zeile[0];
      SQLCommand_INSERT.Parameters[1].Value := sl_zeile[1];
      ...
      SQLCommand_INSERT.Execute;
    end;
end;
    ...
Das Update Befehl wird in diesem Fall ja ständig neu geparst im Gegenteil zum Insert. Ich bekomme die Daten für den Abgleich erst aus der Schleife, um die Datei zeilenweise zu lesen.
Kann ich mir eventuell das Query sparen und mit dem DSData (TADODataSet) weiter arbeiten im EditModus?

Für Idee, Vorschläge oder Verbesserungen wäre ich dankbar.
Vielen Dank im Voraus.
Sven

Geändert von Piro ( 4. Dez 2010 um 22:51 Uhr)
  Mit Zitat antworten Zitat
 


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 11:01 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 by Thomas Breitkreuz