Sortieren und Filtern eines SdfDataSet

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
regaquak
Beiträge: 5
Registriert: Sa 6. Feb 2016, 14:45
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kürten

Sortieren und Filtern eines SdfDataSet

Beitrag von regaquak »

Hallo liebes Forum,

ich bin Amateur-Frickler und möchte eine kleine DB anlegen. Meine Datenquelle ist eine CSV Tabelle, mit dem SdfDataSet fluppt das reibungslos.
Jetzt habe ich ein DBGrid mit meinem SdfDataSet verbunden. Im DBGrid stehen nun alle meine Datensätze unsortiert und in chronologischer Reihenfolge.

Zwei Zielsetzungen:

1. Ich möchte, dass die Daten im DBGrid alphabetisch sortiert werden, der Name des zu sortierenden Feldes lautet ganz klassische "Nachname".
2. Über dem DBGrid ist ein Textfeld, über das ich später im Feld "Nachname" suchen lassen will. Sei es über einen Button oder direkt über den OnKeyDown-Event. Im DBGrid sollen dann auch lediglich die passenden Datensätze angezeigt werden.

Beides habe ich anno dunnemals mit Delphi ziemlich fix hingekriegt über eine SQL Abfrage. Aber jetzt sitze ich über Lazarus und habe gefühlt schon alle Websites dreimal durchgeschaut und ich finde keine pragmatische Lösung!

Anmerkung zu 2: Ich habe es u.a. mit TSQLQuery versucht, aber so wie ich das verstehe, muss ich eine SQL-Connection erstellen, für die ich erst eine SQL auf meinem lokalen PC (meine Datenbank benutze ich nur auf meinem lokalen PC) installieren muss. Wäre ein bissl overkill, oder? Ich möchte einfach nur einen Suchterminus definieren, nach dem dann mein DataSet gefiltert wird.
Nach stundenlanger Suche, Installation von diversen Packages und zu viel Kaffee wende ich mich an Euch da draussen.
Danke schonmal fürs Durchlesen. :)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Sortieren und Filtern eines SdfDataSet

Beitrag von af0815 »

Ich gehe davon aus, das du bei Delphi die BDE verwendet hast. Die hat für verschiedene Desktopdatenbanken die entsprechenden SQL-Befehle emuliert (ja,ja,lang ist's her).

ad 2) Filtern (Suchen) -> Siehe Post von Theo in diesem Forum unter viewtopic.php?f=9&t=2151 (Hint: Google findets auch)

ad 1)Beim Sortieren schauts meines Wissens nach schlecht aus, dafür ist diese (nichteinmal) Desktopdatenbank zu einfach gestrickt.
Eventuell in das Grid laden und dann das Grid sortieren. Ev. ein EInstieg -> viewtopic.php?f=55&t=6407 oder http://wiki.lazarus.freepascal.org/Grid ... ns_or_Rows

Nicht viel, aber vielleicht hilfts weiter.

Meiner Meinung nach, ist eine SQLite DB das richtigere für Dich und die Daten aus dem CSV kann man ja rasch importieren und wenn nötig genauso schnell exportieren. Und du hast fast so ein feeling wie unter der 'BDE'.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

regaquak
Beiträge: 5
Registriert: Sa 6. Feb 2016, 14:45
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kürten

Re: Sortieren und Filtern eines SdfDataSet

Beitrag von regaquak »

Hallo Andreas, Danke fürs Antworten!

ich bin mittlerweile etwas weitergekommen mit meinem Problem - mal wieder von hinten durch die Brust ins Auge. ;)

2. Ja, die Filter-Funktion habe ich probiert... leider ohne Erfolg. Ich habe zu Testzwecken einen Button mit folgender Prozedur bestückt:
SdfDataSet1.Filter:='Name = Meier';
SdfDataSet1.Filtered:=true;
Wenn ich dann den Button drücke, tut sich nichts. Kein Ergebnis, keine Fehlermeldung, als würde ich einen leeren Button drücken. Syntax-Fehler? Google Recherche läuft noch.

Aber das gute....
1. Sortieren klappt! Ich habe meine Daten in eine StringList geladen und damit ein normales Grid gefüllt. Dann mit sortcolrow sortiert. Läuft. :)
Doch auch hier wieder ein "Aber": Jetzt war meine Idee, beim Klicken auf eine Zelle mittels locate den Zeiger des Dataset auf den entsprechenden Datensatz zu setzen. Eigentlich ein Einzeiler im EDIT: OnSelectCell-Event des Grid:
SdfDataSet1.Locate('Name',StringGrid1.Cells[aCol,aRow],[]);
Aber auch hier keine Reaktion. Der Zeiger des DataSet bleibt stehen, der Befehl zeigt keine Wirkung. Ich habe auch hier schon gegoogelt, aber ich finde keinen Ansatz, warum der locate-Befehl nicht funktionieren könnte....

Aber das ist wieder ein anderes Problem, was ich vielleicht in einem anderen Thread suchen sollte.

Auf jeden Fall vielen Dank!

Oliver

Antworten