Autor Beitrag
Alpha_Wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 297

Ubuntu, Win XP, Win Vista
C#, Delphi 6 Prof, Delphi 2007 Prof, Java
BeitragVerfasst: Mo 11.06.07 07:33 
Hallo EE :)

die IntegerList auf die ich mir hier beziehe ist diese hier (von Udontknow): www.delphi-forum.de/...ighlight=integerlist

Seit neuestem ergibt sich bei einem Add in die Liste ein EListError bei der markierten Stelle. Der einzige Unterscheid zu der Originalliste ist der Klassenname der bei mir "TSortedIntegerlist" heisst.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function TSortedIntegerlist.Add(Value: Integer): Integer;
var
  i: integer;
begin
  Result:=-1;

  //Nur Wert hinzufügen, wenn Dubletten erlaubt oder Wert nicht vorhanden
  if (FAcceptDuplicates) or (IndexByValue(Value)=-1) then
    Result:=FList.Add(Pointer(Value));

  //Einsortieren
  While (Result>0) and (Self[Result]<Self[Result-1]) do
  begin
    //Werte tauschen, sodaß neu eingefügter Wert nach vorne wandert
    i:=Self[Result-1];
    Self[Result-1]:=Self[Result];
    Self[Result]:=i;
    //Position ist nach Tausch weiter vorne
    Dec(Result);
  end;
end;


Füllen tue ich die Liste mithilfe einer Query die Daten aus einer SQL Abfrage erhält.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
function TYearBox.FillBox: boolean;
var
  lSortedIntegerList: TSortedIntegerlist;
  lIx: integer;
begin
  result := false;
  try
    cbBox.Properties.Items.BeginUpdate;
    cbBox.Properties.Items.Clear;
    lSortedIntegerList := TSortedIntegerlist.Create;
    lSortedIntegerList.Clear;
    try
      DoOpenSQL(qFilter, fSQL);
      while not qFilter.EOF do begin
        // Sortierung der Integerwerte ASC
        lSortedIntegerList.Add(qFilter.FieldByName(fValueField).AsInteger);
        qFilter.Next;
      end;

      for lIx := 0 to lSortedIntegerList.Count-1 do begin
        cbBox.Properties.Items.Add(IntToStr(lSortedIntegerList.Items[lIx]));
      end;

      result := true;
    except
      on E:Exception do begin
          ShowErrMsg(Format(rsFastBoxError, [lblDescription.Caption, fSQL, '', E.Message]));
      end;
    end;
  finally
    cbBox.Properties.Items.EndUpdate;
    if assigned(lSortedIntegerList) then FreeAndNil(lSortedIntegerList);
  end;
end;



Kann mir jemand helfen diesen Fehler zu beheben? Ich verzweifle schon ^^

Danke!

_________________
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 11.06.07 09:06 
Vermutlich hast du in den Kompileroptionen 'boolsche Ausdrücke vollständig ausrechnen' (oder so ähnlich) eingeschaltet...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function TSortedIntegerlist.Add(Value: Integer): Integer;
begin
  Result:=-1;
...
  While (Result>0) and (Self[Result]<Self[Result-1]) do // <<<<< --- Mööööööp
...
end;

Dann werden beide Terme ausgerechnet (Result ist zwar -1, aber trotzdem wird mit dem Compilerschalter der Vergleich auch berechnet)

_________________
Na denn, dann. Bis dann, denn.
Alpha_Wolf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 297

Ubuntu, Win XP, Win Vista
C#, Delphi 6 Prof, Delphi 2007 Prof, Java
BeitragVerfasst: Mo 11.06.07 09:59 
Alzaimar vielen Dank, hatte zwischenzeitlich mit AQTime die Performance gemessen und laut Leitfaden von AQTime die Projektoptionen angepasst... :roll:

Gibt es, auch wenn die Option eingeschaltet ist, ne Lösung im Code?

Danke nochmal :)

_________________
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.