AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

unbestimmte Anzahl TFDQuerys abgleichen

Ein Thema von apm · begonnen am 19. Feb 2021 · letzter Beitrag vom 19. Feb 2021
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#2

AW: unbestimmte Anzahl TFDQuerys abgleichen

  Alt 19. Feb 2021, 16:37
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Feb 2021 um 17:03 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz