Einzelnen Beitrag anzeigen

sn0w

Registriert seit: 21. Apr 2005
7 Beiträge
 
#1

problem mit listenindex überschreitet maximum

  Alt 21. Apr 2005, 16:54
hallo DPler,

beschäftige mich seid gut 2 wochen mit delphi und und bekomm irgendwie meinen fehler nicht ausgebügelt. folgendes... ich hab 2 listen. die eine (ListeModel) wird aus der datenbank ausgelesen und enthält alle bereits vorhandenen artikel. die 2.(Artikel[I].ARTIKELNUMMER) kommt aus ner csv und ist eine täglich aktualisierte liste mit artikeln. dort sind halt bereits angelegte artikel drin, aber auch neue. mit indexof prüfe ich nun ab, ob die artikel der csv in der liste der bereits vorhandenen artikel existiert oder nicht. wenn sie nicht existieren, werden sie in eine weitere liste eingefügt und in der db angelegt. wenn sie existieren werden die gefundene nummern in eine andereliste gespeichert (reine sichtprüfung) und in der db upgedated. das funktioniert auch soweit ganz gut, solange sich die neuen artikel irgendwo zwischen listenanfang und listenende der bereits angelegten artikel befinden. sobald jedoch alle artikel der bereitsangelegten artikel aktualisiert wurden, steigt er mir mit nem listeneindex überschreitet maximum (position ist der letzte eintrag in ListeModel) aus und ich kapier einfach nicht, warum.Solange der letze Artikel von ListeModel nicht aktualisiert wurde, fügt er ohne probleme neue artikel ein. ist er aktualisiert worden geht er die liste mit den neuen artikeln nicht mehr durch und fügt die da befindlichen artikel auch nicht mehr in die datenbank ein. hier der code zur veranschaulichung.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var I : Integer;
        Zaehler : Integer;
        SQL : String;
        Updatezeit : String;

begin
      Updatezeit := make_timestamp(now);
      if ListeModelID.Items.Count-1 >-1 then
      Zaehler := StrToInt(ListeModelID.Items[ListeModelID.Items.Count-1]) else //wert des letzten zählers
      Zaehler :=0 ;
      Gauge1.Progress := 0;
      Gauge1.MaxValue := ArtikelCount-1;
      For I:=0 to ArtikelCount-1 Do begin
      Gauge1.Progress := I;
     If (Artikel[I].ENDKUNDE='JA') AND (Artikel[I].VERFUEGBARKEIT='JA') then
     begin
        if ListeModel.items.indexof(Artikel[I].ARTIKELNUMMER) =-1 then
      begin
          //insert neue artikel
           Zaehler :=Zaehler+1;
           Application.ProcessMessages;
           ListeUnbekannt.Items.Add(Artikel[I].ARTIKELNUMMER);
           SQL := 'INSERT INTO products VALUES (';....

      end else
      begin
        //update vorhandene artikel

           Application.ProcessMessages;
           ListeUpdate.Items.Add(Artikel[I].ARTIKELNUMMER);
           SQL := 'UPDATE products SET products_ean=';
            ...
      end;
      end;
   end;
end;
wäre super, wenn mir jemand n tip geben kann, woran das liegt, bzw wie ich den fehler beheben kann.

gruß
sn0w
  Mit Zitat antworten Zitat