Einzelnen Beitrag anzeigen

nachtstreuner

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

Beim Einlesen doppelte Datensätze (PK) verhindern

  Alt 2. Sep 2010, 17:01
Datenbank: MSSQL • Version: server • Zugriff über: ADO
Hallo zusammen,

ich möchte eine CSV Datei einlesen, Felder (EAN = Primary Key), Art-Nr usw..
Das Einlesen klappt wunderbar. Bis es zu einer Primary Key Verletzung kommt, dadurch wird das weitere Einlesen verhindert !

Wie kann ich nun dem Programm sagen, das es bei soch einer Konstellation diesen Satz überspringen soll und mit dem nächsten Datensatz der CSV weitermachen soll ?

Delphi-Quellcode:
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; //
      with ADOQueryMetro do begin

        if AdoConnectionMetro.Connected = false then begin
          try
           AdoConnectionMetro.ConnectionString := ProvString;
           //'Provider=SQLOLEDB.1;Password=Eisenach09!;Persist Security Info=True;'+
          // 'User ID=sa;Initial Catalog=METRO;Data Source=METROSQL\SQLEXPRESS';
           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;
        //Showmessage('Kein Fehler'); // weiter
        //Showmessage(Liste[0]);
        try

          ADOQueryMetro.SQL.Clear;
          ADOQueryMetro.SQL.Text := 'INSERT into PRODUKTE (EAN_NR, ART_BEZ_ALTERN, '+
            'PWHG, PWG, PWUG, KZ_WERB) '+
            'VALUES (:sEAN_NR, :sART_BEZ_ALTERN, :sPWHG, :sPWG, :sPWUG, :sKZ_WERB)';
          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];
          //------------------------

          ADOQueryMETRO.ExecSQL;
         except
           on E : Exception do begin
            MELDUNG := 'Doppelter Datensatz(EAN) : ' + LISTE[0] +' | ' +E.Message;
            Showmessage(MELDUNG);

            writelog;


           end;

        end;
      end;



   end;

   i := i +1;
// memo1.Lines.Delete(0);
end;
MELDUNG := 'Es wurden ['+ IntToStr(i) + '] Zeilen verarbeitet...';
WRITELOG;
Grüße vom nachtstreuner
Alles wird gut -

Geändert von mkinzler ( 2. Sep 2010 um 17:04 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat