![]() |
Datenbank: CSV Dateien • Version: Delphi 10.2.3 • Zugriff über: TFDBatchMoveTextReader
Update Problem nach Sortieren in TFDMemTable
Hallo,
mein Ziel ist ein einfaches Programm für macOS zu schreiben, das CSV-Dateien lesen und schreiben soll, also ohne Datenbank nur mit „flat files“ arbeitet. Zur Bearbeitung und Verwendung dieser Daten sollen diese in sortierter und gefilterter Form dargestellt werden können. Die Verwendung beschränkt sich im Wesentlichen auf die Auswahl eines oder mehrerer Datensätze aus der Gesamtmenge. Mein Testprogramm benutzt folgende Komponenten:
Code:
Batch benutzt Reader zum Lesen der CSV-Datei und Writer zum umwandeln in ein TFDMemTable konformes Format, was in FDMemTable1 abgelegt wird. FDMemTable1 ist über LiveBindings mit dem Grid1 verbunden. Hier das bisschen Quellcode was ich zum testweisen Anlegen von zwei Indizes und zum Laden der CSV-Datei verwende:
Batch: TFDBatchMove;
Reader: TFDBatchMoveTextReader; Writer: TFDBatchMoveDataSetWriter; FDMemTable1: TFDMemTable; Grid1: TStringGrid;
Code:
Beim Starten des Programms wird, wie erwartet, der gesamte Datenbestand, in der Reihenfolge wie sie in der Datei stehen, im Grid angezeigt. Nun dachte ich, dass ich auf FDMemTable1 Sortier- und Filterregeln anwenden könnte und dadurch diese Komponente nur noch die Datensätze an das Grid liefert, die der Filterregel entsprechen und dies in der Reihenfolge, die durch die Sortierreihenfolge bestimmt wird. Das scheint aber nicht der Fall zu sein, den bereits das Sortieren nach einen Feld über eins der folgenden Befehle
procedure TForm1.FormCreate(Sender: TObject);
begin Reader.FileName := ExtractFilePath(ParamStr(0)) + 'adr10.csv'; with FDMemTable1.Indexes.Add do begin Name := 'by_name'; Fields := 'Nachname'; Active := True; end; with FDMemTable1.Indexes.Add do begin Name := 'by_plz'; Fields := 'Plz'; Active := True; end; FDMemTable1.IndexesActive := True; Batch.LogFileName := ExtractFilePath(ParamStr(0)) + 'Batch.log'; Batch.Execute; end;
Code:
liefert immer demselben Fehler: Es wird einfach in der Grid-Anzeige der 5. Datensatz mit dem letzten, den 10. Datensatz überschrieben. Erst wenn ich ein Feld editiere, mit Enter bestätige und danach mit den Cursortasten mich in eine andere Zeile bewege, wird plötzlich die richtige Sortierreihenfolge angezeigt.
FDMemTable1.IndexName := 'by_name';
FDMemTable1.IndexName := 'by_plz'; FDMemTable1.IndexFieldNames := 'Plz'; Nun meine Fragen: Wie muss ich Sortier- und Filter- Befehle auf die MemTable ausführen, damit sie optimiert angewendet werden und sich die Grid-Darstellung danach aktualisiert? Ist mein Konzept grundsätzlich richtig oder sollte ich zwischen TFDMemTable und TStringGrid eine TFDQuery zwischenschalten? Das hatte ich verworfen, weil ich dazu eine Connection benötige, womit ich als DB Laie nichts anfangen kann (mein Programm soll ja auch ohne DB funktionieren). Update: Anhang einfügen geht nicht, deshalb hier externer Link mit sha256 Prüfsumme: ![]() Vielen Dank im Voraus Bernd |
AW: Update Problem nach Sortieren in TFDMemTable
Hallo,
beim weiteren probieren mit meinem Testprogramm ist mir ein anderes Problem aufgefallen: Editiert man ein Datensatz im TStringGrid, und sortiert dann, wird der alte Datensatz und der neue Datensatz angezeigt. Die Anzahl der angezeigten Datensätze bleibt aber gleich. Ob dafür ein anderer Datensatz überschrieben wird, oder die Anzahl nicht aktualisiert wird, kann ich nicht erkennen. Ich weiß nicht, wie man zu Debug-Zwecken den Inhalt einer TFDMemTable auslesen kann. Mein Fazit: Es ist zwar möglich ein TStringGrid über LiveBindings an eine TFDMemTable anzubinden, aber dies ist offensichtlich sinnlos. Das einzige was ich bei den mitgelieferten Beispielen gefunden habe ist: ![]() Dort wird ein TBDGrid über ein TDataSource an eine TFDMemTable angebunden. Das Beispiel ist deshalb nicht auf eine "Geräteübergreifende Anwendung" anwendbar, da meines Wissens ein TBDGrid nicht dafür verwendbar ist. Mir würde bereits ein kleiner Hinweis darauf, wie die Anbindung eines TStringGrid an eine TFDMemTable realisiert werden kann, sehr weiterhelfen. |
AW: Update Problem nach Sortieren in TFDMemTable
Wurde das Problem behoben? Es besteht leider immer noch in FMX!
Ich bekomme die Sortierung auch nicht upgedatet, wenn ich mit First/Next eimal durchlaufe! Auch der BindingNavigator mit seinem Refresh Button hilft nichts :-( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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