Delphi, was ist die schnellsten Rekord-Zugriffsverfahren in einem TcxGrid oder TDataSet

StackOverflow https://stackoverflow.com/questions/4080196

  •  28-09-2019
  •  | 
  •  

Frage

Ich bin mit Delphi 2007 und die TcxGrid den Inhalt einer Datei Bibliothek zu zeigen. Die Datenbank Häuser Informationen über die Art der Datei, Name, Pfad und Erweiterung.

Bei der Prüfung Ich bin Laden 1700 Datensätze in das Netz durch die TDataSet. Ich mache Raum auch im Netz für 3 weitere Felder, die noch berechnet werden müssen. Sie sind, wenn die Dateien vorhanden ist, die Größe der Datei und das Datum geändert.

Mein Ziel ist es, dem Benutzer alle Informationen anzuzeigen, die gespeichert wird (die großen Werke und ist schnell), dann in einem Hintergrundthread die Informationen für die anderen drei Datenfelder finden und dann legen Sie sie in die TcxGrid. Diese Frage hat wenig oder gar nichts mit dem Einfädeln zu tun tue ich. Seine Arbeit in Ordnung.

Mein Problem ist, dass die Felder in dem Raster zugreifen, die bereits aufgebaut ist, eine enorme Verlangsamung hat, wenn ich darauf zugreifen. Ich habe zwei verschiedene Arten versucht ...

  1. Grid.DataController.Values ??[Record, Field] - aber das ist eine Variante und ich vermute, das ist, warum ist es so langsam

  2. Grid.DataController.DataSet.FindFirst Grid.DataController.DataSet.FindNext Grid.DataController.DataSet.Fields [Field] Aber mit diesem „suchen“ Methode ist genauso langsam wie die erste Methode, die ich versuchte. Suchen Sie und MoveBy sind langsam auch.

So lange Frage kurz, Was ist der schnellste Weg, um einen Datensatz zugreifen?

War es hilfreich?

Lösung 3

Der Aktualisierungscode sein mußte innerhalb von einem Beginn / Ende-Update war mein großes Problem.

Danke Lieven für Ihren Kommentar, wie es die Lösung für mein Problem war. Und danke Gad und Daniel für Antworten, die ich daraus gelernt.

Das wäre deutlicher gewesen zu jedem hatte mich gestern noch einmal einen Code zu schreiben.

Andere Tipps

Bitte beachten Sie auch erwähnen, ob Sie eine TcxGridDBTableView oder TcxGridTableView verwenden?

Ich denke, mit nicht-db bewusst TcxGridTableView oder TcxBandedGridTableView mit

View.DataController.Values ??[Record, Field] ist die schnellste.

Auch wenn Sie eine DB-Anwendung haben, können Sie die nicht-db-Version der Blick auf die Initialisierung laden und als Griff Datacontroller Ereignisse Datenänderungen und Probleme der jeweiligen SQL-Befehle für die Aktualisierung der Datenbank zu erfassen.

Sie können die Ansicht wie folgt füllen: ?

class procedure TForm1.FillView(const View: TcxGridBandedTableView; const Sql: string);
var
  Reader: TMyOrmDataReader;
  i: Integer;
begin
  Assert(Assigned(View), 'View is not assigned parameter.');
  with View.DataController do
  begin
    BeginFullUpdate;
    try
      Reader := TMyOrm.GetDataReader(SQL);
      try
        i := 0;
        RecordCount := 50 * 1000; // make it something big in order to avoid constant resizing by 1
        while Reader.Read do
        begin
          // Fill the view
         Values[i,  0] := Reader.GetInt32(0);
         Values[i,  1] := Reader.GetString(1);
         Inc(i);
        end;
        RecordCount := i - 1;
      finally
        Reader.Free;
      end;
    finally
      EndFullUpdate;
    end;
  end;
end;

Und dann Zugriff Werte wie:

View1.DataController.Values[View1.DataController.FocusedRecordIndex, View1Column1.Index].AsString

Sie können mit Tabelle arbeiten / Datensatz zunächst die fehlenden Daten anhängen und dann alle die Felder wie datbound zeigen.

Ich weiß, das ist ein alter Thread, aber ich werde erwähnen, dass das Netz der Umstellung auf Provider-Modus eine andere Art und Weise ist die Ladegeschwindigkeit zu verbessern, da sie im wesentlichen die Gitter Laden in einer virtuellen Operation macht. (Datensätze werden nicht geladen, bis sie zur Anzeige oder anderen Datenzugriff benötigt werden.) Danach wird der Datacontroller sie zwischenspeichert, so dass der Zugang ist sehr schnell einmal geladen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top