AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Beim Einlesen doppelte Datensätze (PK) verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Beim Einlesen doppelte Datensätze (PK) verhindern

Ein Thema von nachtstreuner · begonnen am 2. Sep 2010 · letzter Beitrag vom 2. Sep 2010
 
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Beim Einlesen doppelte Datensätze (PK) verhindern

  Alt 2. Sep 2010, 17:58
Viele Dank erstmal für die Antworten,

mit dem MERGE muss ich mich erstmal beschäftigen.

Die Tips von shmia habe ich beherzigt und auch so im unten stehenden Code eingefügt :

Allerdings schreibt er mir jetzt keinen einzigen Datensatz in die DB,
Stattdessen erhalte ich folgende Meldung aus dem Protokoll :

02.09.2010 18:59:08 Es werden [15668] Zeilen verarbeitet !
02.09.2010 18:59:18 Doppelter Datensatz(EAN) : 1215126156152 | Ungültige Autorisierungsangabe
02.09.2010 18:59:24 Doppelter Datensatz(EAN) : 1233567891012 | Ungültige Autorisierungsangabe
02.09.2010 18:59:29 Doppelter Datensatz(EAN) : 1234567890128 | Ungültige Autorisierungsangabe
02.09.2010 18:59:36 Doppelter Datensatz(EAN) : 1472583691477 | Ungültige Autorisierungsangabe

und das obwohl ich vor dem Start die Tabelle geleert habe.

Hier nochmal der geänderte Code :
Code:
//==============================================================================
// Verbindung zur Datenbank herstellen
//==============================================================================
procedure TForm1.ConnectToDatabase;
begin
  if not AdoConnectionMetro.Connected then
  begin
    AdoConnectionMetro.ConnectionString := ProvString;
    //'Provider=SQLOLEDB.1;Password=*******;Persist Security Info=True;'+
    // 'User ID=sa;Initial Catalog=METRO;Data Source=METROSQL\SQLEXPRESS';
    try
      AdoConnectionMetro.Connected := true;
     // ADOQueryMETRO.Active := true;
    except
      on E : Exception do begin
            MELDUNG := 'VERBINDUNGSFEHLER : '+ E.Message;
            writelog;
            FEHLER := 1;
            application.Terminate;
            form1.Close;
            ABORT;
            EXIT;
      end;
    end;
  end;
end;
//==============================================================================
// Verarbeitung starten
//==============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  liste    : TStringDynArray;
  sTEXT,DATNAME    : string;
  test : variant;
begin
  try
    memo1.Clear;
    memo1.Lines.LoadFromFile(FILEPFAD +'\'+ FileDat);
    MELDUNG := FilePFAD + '\' + FileDat + ' ... eingelesen';
    WRITELOG;
  except
    MELDUNG := '[FEHLER:] Konnte CSV Datei nicht öffnen ...';
    WRITELOG;
    Application.Terminate;

  end;

  I := 0;
  MELDUNG := 'Es werden ['+IntToStr(memo1.Lines.Count)+'] Zeilen verarbeitet !';
  Writelog;
  ADOQueryMetro.SQL.Clear;
  ADOQueryMetro.SQL.Text := 'INSERT into PRODUKTE (EAN_NR, ART_BEZ_ALTERN, '+
            'PWHG, PWG, PWUG, KZ_WERB) '+ //, WERB_ID, WERB_ZEITR_VON, WERB_ZEITR_BIS, '+
            //'BAS_GROESSE, UWD_MASSENEINHEIT_SL, VK_PREIS_BR, VK_PREIS_ALT_BR, '+
            //'VK_PREIS_WERB_BR, GRUNDPREIS_BR, GRUNDPREIS_ALT_BR, GRUNDPREIS_WERB_BR, '+
            //'AKTIONSBEGINN, AKTIONSENDE) ' +
            'VALUES (:sEAN_NR, :sART_BEZ_ALTERN, :sPWHG, :sPWG, :sPWUG, :sKZ_WERB)';



  while memo1.Lines.Count <> i do begin
   sTEXT := memo1.Lines[i];
   Liste := EXPLODE(';',sTEXT);

   // Daten Speichern
   IF (sTEXT <> '') and (LISTE[0] <> 'EAN_NR') then
     begin
      // SATZ_SPEICHERN; //
       ADOQueryMETRO.Parameters.ParamByName('sEAN_NR').Value := LISTE[0];
       ADOQueryMETRO.Parameters.ParamByName('sART_BEZ_ALTERN').Value := LISTE[5];
       ADOQueryMETRO.Parameters.ParamByName('sPWHG').Value   := LISTE[7];
       ADOQueryMETRO.Parameters.ParamByName('sPWG').Value    := LISTE[8];
       ADOQueryMETRO.Parameters.ParamByName('sPWUG').Value   := LISTE[9];
       ADOQueryMETRO.Parameters.ParamByName('sKZ_WERB').Value := LISTE[10];
       //------------------------
       try
         ADOQueryMETRO.ExecSQL;
       except
           on E : Exception do begin
            MELDUNG := 'Doppelter Datensatz(EAN) : ' + LISTE[0] +' | ' +E.Message;
           Showmessage(MELDUNG);

            writelog;

           end;
       end
   end;
   i := i +1;
   //   memo1.Lines.Delete(0);
  end;

  MELDUNG := 'Es wurden ['+ IntToStr(i) + '] Zeilen verarbeitet...';
  WRITELOG;
  DATNAME := leftstr(dateToStr(date),2)+midstr(dateToStr(date),4,2)+
   leftstr(TimeToStr(time),2)+midstr(timeToStr(time),4,2)+
   midstr(timeToStr(time),7,2)+'.CSV';
  //   movefile(PChar(FILEPFAD+ '\' + FileDat),PChar(sichPFAD+'\'+DATNAME));
   MELDUNG := FILEPFAD + '\' + FileDat+' nach '+ sichPfad + '\'+DATNAME+' verschoben !!';
   //frmLOGBUCH.memo.Lines.Add('c:\wa_order.txt nach c:\sich_order\'+DATNAME+' verschoben !!');
   writelog;
  MELDUNG := 'VERARBEITUNG abgeschlossen !! - Keine FEHLER !';
  WRITELOG;
//Form1.close;
end;
Alles wird gut -
  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 03:35 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-2025 by Thomas Breitkreuz