Delphi-PRAXiS
Seite 3 von 7     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird Import aus Textdatei extrem langsam (https://www.delphipraxis.net/140213-firebird-import-aus-textdatei-extrem-langsam.html)

nahpets 14. Sep 2009 09:45

Re: Firebird Import aus Textdatei extrem langsam
 
Hallo,

hast Du schonmal probiert, was passiert, wenn Du mehrere Insert gleichzeitig absetzt?
Davon ausgehend, dass das in einer Schleife passiert:
Delphi-Quellcode:
with DM_User.SQLQueryTemp do
  begin
    with SQL do
      begin
        Clear;
        Add(sqltxt);
      end;
      ExecSQL(true);
    end;
einmal in der Art ändern:
Delphi-Quellcode:
DM_User.SQLQueryTemp.Sql.Clear;
... // irgendeine Schleife
with DM_User.SQLQueryTemp do
  begin
    SQL.Add(sqltxt);
    If SQL.Count Mod 100 = 0 then begin
      ExecSQL(true);
      SQL.Clear;
    end;
  end;
... // Ende der Schleife
// Hier nicht vergessen den Rest wegzuschreiben, wenn die Satzzahl nicht durch 100 zu teilen ist.
If DM_User.SQLQueryTemp.SQL.Count > 0 then DM_User.SQLQueryTemp.SQL.ExecSQL(true);
dann wird alle 100 Datensätze das Insert für diese Sätze abgesetzt. Bei der 100 kannst Du dann auch ausprobieren, ob eine größere oder kleinere Anzahl von Sätzen die Geschwindigkeit erhöht oder verringert.
Wie sieht der Indexaufbau der Tabelle aus, auch hier kann bei satzweisem Einfügen ein Laufzeitproblem auftreten, wenn die Pflege des Index zu kompiliziert wird. Eventuell auch den Index vor dem Import wegwerfen und nach dem Import neuerstellen, dies geht allerdings nur, wenn der Index nicht zur Doppeltenprüfung... benötigt wird.

globetrotter77 14. Sep 2009 10:45

Re: Firebird Import aus Textdatei extrem langsam
 
langsam, aber sicher, glaube ich, nicht mehr programmieren zu können!

beim Versuch, mit Params zu arbeiten, bekomme ich jetzt bei jeder Zeile folgenden Fehler:
Datenbank-Server-Fehler: Column unknown
ARTNR
At line 1, column 38

das SQL-Statement habe ich auf das Minimum gekürzt:
SQL-Code:
INSERT INTO ARTIKEL (ARTNR) VALUES (:ARTNR)
Sehr seltsam, da er die ARTNR in der Feldliste offenbar sehr wohl kennt, erst in der Werteliste passt es ihm nicht mehr!!!

nahpets 14. Sep 2009 10:48

Re: Firebird Import aus Textdatei extrem langsam
 
Hallo,

zeig' uns bitte mal den Quelltext, mit dem Du die Parameter füllst, da scheint irgendetwas schief zu laufen. Mir sieht das so aus, als würden der Parameter nicht gefüllt werden.

globetrotter77 14. Sep 2009 11:29

Re: Firebird Import aus Textdatei extrem langsam
 
Delphi-Quellcode:
DM_User.SQLQueryImport.Params[paramnr].Value:=feldtxt;
nicht wundern über den veränderten Namen, ich habe fürs Testen einen neuen SQLQuery angelegt.

Der Parameter ist definiert mit
Delphi-Quellcode:
        DataType = ftString
        Name = 'artnr'
        ParamType = ptInput
        Size = 17
        Value = ''

nahpets 14. Sep 2009 11:48

Re: Firebird Import aus Textdatei extrem langsam
 
Hallo,

was Du gemachts hast, sieht eigentlich nicht wirklich falsch aus, daher hier mal ein paar Vorschläge zur Lösung des Rätsels:

Sind Datenbank und/oder Komponenten bei den Tabellen-, Feld- und/oder Parameternamen casesensitive?

Schreib' mal in den Statements alle Tabellen- und Spaltennamen genau so, wie die Datenbank. Ebenso die Parameternamen im Statement so, wie Du sie im Programm definiert hast.

Was steht in paramnr? Bist Du sicher, das Du da den richtigen Parameter erwischst? Kannst Du das im Programm auch mit ParamByName oder ähnlichem umsetzen?

omata 14. Sep 2009 11:57

Re: Firebird Import aus Textdatei extrem langsam
 
Zitat:

Zitat von globetrotter77
StartTransaction erwartet einen "benutzerdefinierten Transaktionsbezeichner" - was ist denn damit gemeint??
und wie macht man das?

Delphi-Quellcode:
var TD:TTransactionDesc; (aus DBXpress)
begin
  SQLConnection.StartTransaction(TD);
  try
    SQLConnection.ExecuteDirect('INSERT INTO ...');
    SQLConnection.Commit(TD);
  except
    SQLConnection.Rollback(TD);
  end;
end;

globetrotter77 14. Sep 2009 12:01

Re: Firebird Import aus Textdatei extrem langsam
 
da bin ich mir sogar sehr sicher, weil ich nämlich nach dem Zurechtstutzen auf das Wesentliche versehentlich noch einen anderen Parameter füllen wollte, der in der Abfrage gar nicht mehr vorkommt - das führt sofort zu einem Systemfehler!
Andererseits führt auch die konsequente Verwendung der Kleinschreibung beim Parameter immer zur selben Fehlermeldung mit groß geschriebener ARTNR.
ParamByName etc. habe ich auch ausprobiert - keine Veränderung
bin langsam mit meinem Latein am Ende ... :(

globetrotter77 14. Sep 2009 12:13

Re: Firebird Import aus Textdatei extrem langsam
 
Zitat:

Zitat von omata
Delphi-Quellcode:
var TD:TTransactionDesc; (aus DBXpress)
begin
  SQLConnection.StartTransaction(TD);
  try
    SQLConnection.ExecuteDirect('INSERT INTO ...');
    SQLConnection.Commit(TD);
  except
    SQLConnection.Rollback(TD);
  end;
end;

das führt zu folgendem Fehler:
"Ungültige Transaktions-ID"
Wie kann man die ID zuordnen? Ich hätte eigentlich gedacht, dass das die DB für mich übernimmt, oder?

omata 14. Sep 2009 12:24

Re: Firebird Import aus Textdatei extrem langsam
 
Oh, den Fehler hatte ich noch nie. TD ist aber nur ein einfaches Record. Einfach mal TD. eingeben...

hoika 14. Sep 2009 16:57

Re: Firebird Import aus Textdatei extrem langsam
 
Hallo,

schau mal hier

1



Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.
Seite 3 von 7     123 45     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