Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Denkanstoß MemTable/Cachetable FireDac

  Alt 1. Okt 2020, 19:46
Wie gesagt, einfach die Daten (Records und Fields) in ein DataSet ohne DB-Verbindung (MemTable) kopieren.
Delphi-Quellcode:
Q := Datamodule.OpenSql('SELECT a, b FROM t');
try
  MemData.Close; // um den Inhalt schnell zu löschen, oder eben via "while MemData.RecordCount > 0 do MemData.Delete;" jeden Datensatz entfernen
  MemData.Open; // in MemData sind natürlich die gleichen Felder drin, wie im Query
  // eventuell auch noch MemData.DisableControls und MemData.EnableControls verwenden
  while not Q.EoF do begin
    MemData.Insert;

    //TDatamodule.CopyAllFields(Q, MemData); // Wir haben uns ein paar Hilfsfunktionen gebaut, aber man kann auch direkt mir den Query-Komponenten arbeiten.
    for i := 0 to Q.FieldCount - 1 do
      MemData.Fields[i].Value := Q.Fields[i].Value;
    { oder, weil ich unten auch nur zwei Felder nutze
    MemData.FieldByName['a'].Value := Q.FieldByName['a'].Value;
    MemData.FieldByName['b'].Value := Q.FieldByName['b'].Value;
    }


    MemData.Post;
    Q.Next;
  end;
finally
  Q.Free;
end;

Delphi-Quellcode:
//CacheList := TDirectory<string,string>.Create;

with Datamodule.OpenSql('SELECT a, b FROM t') do
  try
    CacheList.Clear;
    while not EoF do begin
      CacheList[AsString('a')] := AsString('b'); // bzw. FieldByName('a').AsString
      Next;
    end;
  finally
    Free;
  end;
Also Daten abrufen (SELECT), die Dataset-Records durchlaufen und die Daten in der Liste speichern.

Und dann nur noch die Liste befragen
Delphi-Quellcode:
S := CacheList['irgendwas']; // Peng, wenn es 'irgendwas' nicht gibt. (könnte man aber auch auf "Leerstring wenn nicht vorhanden" umbauen)

if CacheList.Contains('irgendwas') then
  S := CacheList['irgendwas'];
  
if CacheList.TryGet('irgendwas', X) then
  S := X;

...
und wenn nötig den oberen Code nochmal ausführen, um die Liste zu aktualisieren.
$2B or not $2B

Geändert von himitsu ( 1. Okt 2020 um 19:52 Uhr)
  Mit Zitat antworten Zitat