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