Einzelnen Beitrag anzeigen

dUSER.th

Registriert seit: 19. Jun 2008
24 Beiträge
 
#1

Datenimport ohne Doppelte Daten mit SQL

  Alt 1. Okt 2013, 08:35
Datenbank: EMS FireBird • Version: 1.5 • Zugriff über: Delphi 7 ZQuery
Hallo zusammen,

Ich habe 2 Tabellen.
Tabelle1 "TB_IMPORT"
wird mit Daten aus *.xls oder *.txt gefüllt.
Tabelle2 "TB_RP2013"
soll mit Daten aus Tabelle1 befüllt werden aber keine schon vorhandenen Daten.
In beiden Tabellen gibt es das Feld "BEWNR" = Bewegnummer was eindeutig ist.

Mein momentaner Ansatz.

Delphi-Quellcode:
  
  DBF2 := ZQuery2;
  DBF3 := ZQuery3;
  vJAHR:= '2013';

  with DBF2 do begin
    SQL.Clear;
    SQL.Text:= 'SELECT '+
                 'TB_IMPORT.GEBUCHT, '+
                 'COUNT(TB_IMPORT.BEWNR) AS DOPPELT, '+
                 'TB_RP'+vJAHR+'.BEWNR '+
                'FROM '+
                'TB_IMPORT '+
                'INNER JOIN TB_RP'+vJAHR+' ON (TB_IMPORT.BEWNR=TB_RP'+vJAHR+'.BEWNR) '+
                'GROUP BY '+
                 'TB_IMPORT.GEBUCHT, '+
                 'TB_RP'+vJAHR+'.BEWNR';
    DBF2.Active:= True;
    Form1.ProgressBar1.Max:= DBF2.RecordCount;
    while NOT DBF2.Eof do begin
      vBEWNR := DBF2.FieldValues['BEWNR'];
      Form1.ProgressBar1.Position:= DBF2.RecNo;

      with DBF3 do begin
        SQL.Clear;
        SQL.Text:= 'UPDATE TB_IMPORT SET GEBUCHT = 1 WHERE '+
                    'TB_IMPORT.BEWNR = ' + vBEWNR;
        DBF3.ExecSQL;
      end;
      Label3.Caption:= IntToStr(DBF2.RecordCount);
      Form1.Repaint;
      DBF2.Next;
    end;
  end;
Es werden alle 2 Stunden cs. 10.000 Daten eingelesen was mit unter sehr langsam ist.
Ich denke, ich hatte das schon mal schneller. Nur leider sind von meiner 1. Version verschiedene Units verloren gegangen. Ich habe nur noch die *.exe Datei aber da finde ich nicht alles.

Habt Ihr eventuell einen hinweis was ich noch ändern sollte oder kann?
Vielen Dank
  Mit Zitat antworten Zitat