Hängen da auch noch paar Edits/Grids an diesen DataSets?
Dann ist es natürlich langsam, wenn man währenddessen nicht mit DisableControls arbeitet.
Und warum àlles manuell durchscrollen und die ID suchen, anstatt Locate zu benutzen?
Vom Tempo her ist es fast egal, auch wenn rückwärts natürlich dennoch schneller ist, weil insgesamt im Array weniger einträge verschoben werden müssen.
Und zusätzlich ist der Code auch noch wesentlich kürzer/übersichtlicher.
Zitat:
Delphi-Quellcode:
i := 0;
while i < Length(quArrData)
do
begin
if quArrData[i].IsEmpty
then
begin
Delete(quArrData, i, 1);
Delete(sArrIdField, i, 1);
Dec(i);
end;
Inc(i);
end;
Delphi-Quellcode:
for i := High(quArrData) downto 0 do
if quArrData[i].IsEmpty then
begin
Delete(quArrData, i, 1);
Delete(sArrIdField, i, 1);
end;
Zitat:
Delphi-Quellcode:
bQuAction := false;
while not quArrData[i].Eof
and (quDataLong.FieldByName(sIdFieldLong).AsInteger > quArrData[i].FieldByName(sArrIdField[i]).AsInteger) do
begin
quArrData[i].Next;
bQuAction := true;
end;
if bQuAction then Break;
Delphi-Quellcode:
//bQuAction := quArrData[i].Locate(sArrIdField[i], quDataLong.FieldByName(sIdFieldLong).AsInteger);
bQuAction := quArrData[i].LocateEx(sArrIdField[i], quDataLong.FieldByName(sIdFieldLong).AsInteger, [lxNext]);
if bQuAction then Break;
[edit]
Ich seh grad, es war hier kein <> sondern >
und Locate arbeitet natürlich wie =, also das Gegenteil von <>
Hatte hier zuerst die Schleife von
//Start ID anfügen und weiter springen
, welche aber über das Array und kein Dataset läuft.
Bei einem
sortierten Array kann man könnte man aber ebenfalls
ein TArray.BinarySearch verwenden.
[/edit]
PS: Was soll das Zweite
if Length(sArrIdField) <> Length(quArrData) then Exit;
machen?
Wenn es beim Ersten schon gleich war und dazwischen links und rechts genau gleichviel gelöscht wurde, dann kann es dort NIEMALS unterschiedlich sein.
Ansonsten isses ein bissl schwer direkt zu erkennen, was nun genau gemacht wird, aber mit bissl kürzerem/übersichtlicherm Code versteht man es womöglich auch schneller.