AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Append Code optimieren aber was macht Sinn?
Thema durchsuchen
Ansicht
Themen-Optionen

Append Code optimieren aber was macht Sinn?

Ein Thema von Piro · begonnen am 1. Dez 2010 · letzter Beitrag vom 1. Dez 2010
Antwort Antwort
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#1

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 11:26
Das andauernde FieldByName macht die Sache sicherlich auch nicht schneller. Hast du es schon mal mit persistenten Feldern versucht ?
Glückauf
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 11:33
Wenn ich jetzt nicht völlig blind bin, würde ich sagen, dass das ständige Öffnen und Schliessen des DataSet überflüssig ist.

Frank

EDIT:
Code:
if FileExists(path_canban) = True then
begin
  AssignFile(F, path_canban);
  Reset(F);
  DSData.Close;
  DSData.CommandText := 'Select * from fullload_data';
  DSData.Open;
  while not EoF(F) do
  begin
    Readln(F, zeile);
    sl_zeile := Split(zeile,';', True); // ist nicht das Problem
    Inc(counter);
    try
      DSData.Append;
      DSData.FieldByName('lname').AsString := sl_zeile[0];
      DSData.FieldByName('sachnr').AsString := sl_zeile[1];
      ..
      DSData.Post;
    Except
      //
    end;
  end;
  DSData.Close;
  ...
Frank Reim

Geändert von dataspider ( 1. Dez 2010 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

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

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 12:09
An alle, die mir den Tipp geben haben, dass ich das Öffnen der Tabelle vor die Schleifen legen solle, ein herzlichen Dank.

Das hat 50% Zeit eingespart.

jetzt werde ich mir noch die anderen Vorschläge anschauen. Vielleicht geht es ja noch schneller und komme an die Zeit des BULK INSERT.

Vielen Dank nochmal für eure Hilfe.

gruß, Sven
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 12:46
CSV-Dateien kann man auch per ADO öffnen Hier im Forum suchenCSV
(ok, den Hinweis hatte ich dir schon gegeben ... scheint also wohl nicht interessant zu sein)

Der Insert geht wesentlich schneller mit einem "prepared" INSERT-Statement mit Parametern.
Weiterhin sollte man den kompletten INSERT innerhalb einer Transaktion durchführen.
Einige DBMS aktualisieren die Indizes nämlich erst nach Abschluss der Transaktion.

SQL-Code:
INSERT INTO tab ( fld1, fld2, fld3, fld4 )
VALUES ( :fld1, :fld2, :fld3, :fld4 )
PS: Nach meiner Erfahrung ist das Öffnen der gesamten Tabelle um dann mit Append und Post neue Datensätze einzufügen, die langsamste Variante, die man wählen kann
Um das Übertragen der bestehenden Datensätze zu verhindern, solltest du den SELECT wie folgt aufrufen:
SELECT * FROM fullload_data WHERE 1 = 0
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 1. Dez 2010 um 12:58 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 12:57
Die Klausel WHERE 0=1 verhindert, dass unnötigerweise Daten vom Server gelesen werden.
Delphi-Quellcode:
DSData.Close;
DSData.CommandText := 'Select * from fullload_data WHERE 0=1';
DSData.Open;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 12:59
Die Klausel WHERE 0=1 verhindert, dass unnötigerweise Daten vom Server gelesen werden.
Delphi-Quellcode:
DSData.Close;
DSData.CommandText := 'Select * from fullload_data WHERE 0=1';
DSData.Open;
Aber anscheinend steht er auf kompliziert, unflexibel und langsam
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

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

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 13:26
Das mit den CSV Dateien hatte ich auch schon mal gemacht. War meine erste Lösung. Nun haben sich aber die Anforderungen geändert und die Daten müssen nun in eine MS SQL Datenbank, um komplexe Abfragen zu erstellen.

Wie müsste man das mit dem "prepared" INSERT-Statement mit Parametern machen. Mir fehlt gerade der Ansatz. Müsste ich dann TADOQuery oder TADOCommand benutzen?

Eins hatte ich noch vergessen. Meine Datenbanktabelle wird vor dem Import geleert mit. Also keine alten Daten vorhanden.
Delphi-Quellcode:
// TADOCommand Komponente
SQLCommand.CommandText := 'TRUNCATE TABLE fullload_data';
SQLCommand.Execute;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Append Code optimieren aber was macht Sinn?

  Alt 1. Dez 2010, 18:25
Und trotzdem hast du immer noch eine CSV-Tabelle als Ursprung.

Jetzt willst du die Auswertung damit nicht machen, sondern in eine andere DB pusten.
Und deswegen liest du die CSV-Daten wieder anders ein?

Gerade wenn in der CSV-Datei auch noch die Feldnamen drinstehen, kann man sehr einfach einen multifunktionalen Importer schreiben, der die Quell-Felder in die Zielfelder schreibt.

Felder, die nicht in der Quelle und/oder Ziel vorhanden sind, werden nicht übertragen.

Und das alles mit den ADO-Kompos

Wozu also der Mischmasch gut sein soll, verstehe ich einfach nicht, aber ist ja auch nicht mein Projekt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 14:17 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