![]() |
EasyLINQ, eine generische Liste die einfache SQL Befehle ausführt
Liste der Anhänge anzeigen (Anzahl: 5)
Hallo liebe DP-ler,
oft braucht man Objektlisten, die gefiltert, sortiert oder gruppiert werden müssen. Unter Delphi Prism bzw. .net gibt es LINQ, das man in solchen Fällen sicher zu schätzen weiss. Leider gibt es unter Delphi selbst nichts dergleichen. Darum habe ich einmal etwas in diese Richtung erstellt. Aus Zeitgründen sicher noch nicht perfekt, aber es arbeitet soweit zufriedenstellend... Welche SQL-Befehle werden unterstützt?
Zur Funktionsweise: Die Liste kann Klassen oder Records verwalten. Records haben derzeit die Limitierung, dass in die Werte nicht geschrieben werden kann. Somit funktionieren CALC und UPDATE nicht. Eine Exception wird ausgelöst, wenn versucht wird einen der Befehle in Verbindung mit Records zu nutzen. Enumeration wird unterstützt, daher auch "for in" möglich. Handhabung also wie TList<T>. Durch den Befehl "Execute()" wird das Kommando abgesetzt und eine neues Objekt als Lookup-Liste zurückgegeben. Löschen von Objekten ist in einer Lookup-Liste nicht möglich. Zur Berechnung von Werten habe ich eine Calculator Klasse eingebunden. Mit ihr lassen sich einfache Rechenoperationen durchführen und deren Ergebnisse wieder in Properties von Klassen zurückschreiben. Unterstützt werden die Operatoren - + / * ^ ( ) sin cos tan sqr log cot sec csc Was gilt es zu beachten?
Neues Update:
Update, Version 1.3, 30.1.2013
Update, Version 1.4, 15.8.2014 Update, Version 1.41, 4.9.2014 Im Laufe der Zeit wird sich sicher noch die eine oder andere Funktion ergeben. Mit dem Parser bin ich noch nicht so ganz glücklich, hier lässt sich auf jeden Fall noch einiges optimieren. Derzeit müssen Ausdrücke in Klammern gesetzt werden, das vereinfacht das Parsen. Beispiel:
Delphi-Quellcode:
ClassLinq := TLinq<TMyClass>.Create;
{...} TempLinq := ClassLinq.Execute( 'ORDER BY LastName, FirstName' ); for item in TempLinq do Memo1.Lines.Add( item.ToString ); TempLinq.Free; {...} ClassLinq.Free Einige SQL-Beispiele aus der beiliegenden Demo:
Delphi-Quellcode:
SELECT WHERE (City="Vienna")
SELECT ORDER BY City,Value SELECT ORDER BY City,Value DESC SELECT TOP(3) WHERE (UPPER(Lastname) like "%A%") ORDER BY MySubText.Text SELECT CALC(value=(value*32+4)/2) ORDER BY value SELECT TOP(3) WHERE (LOWER(Firstname)="kurt") OR (LOWER(Firstname)="edmund") SELECT GROUP BY City ORDER BY LastName SELECT WHERE (MySubText.Text="Sub3") OR (FirstName="Kurt") UPDATE SET (Firstname="Max", Lastname="Mustermann") WHERE (City="Linz") OR (MySubText.Text="Sub4") UPDATE SET (Value=CALC(23*2-4)) WHERE (City="Vienna") Ideen und Wünsche für Erweiterungen und Verbesserungen sind gerne willkommen... liebe Grüße, Daniela |
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Klingt interessant, werde es mir später mal anschauen. Ich arbeite auch seit einiger Zeit an einer Linq ähnlichen Sache für Delphi (unter Zuhilfenahme der
![]() |
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
jössas, so viel Zeit habe ich gar nicht. Ich hab das in drei Stunden zusammengebastelt. Im Moment habe ich leider wenig Zeit und solche Sortier- und Gruppiergeschichten halten mich immer unnötig auf. Daher diese kleine (wirklich kleine) Klasse :wink:
|
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Was ist denn mit
![]() |
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Zitat:
|
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Ahso. Ja denn.
|
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Die Komponente ist eine gute Idee. Vielleicht gerade weil sie klein und überschaubar sit.
Grüße in die Runde |
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Die Idee ist super!
Werde ich mir demnächst mal gern mit anschauen. PS: Eine native Linq-Lösung hätte ich mir für XE2 erhofft. (Die tatsächlichen Neuerungen interessieren mich persönlich erst mal weniger.) |
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Das Problem ist oft, dass die Bibliotheken wahnsinnig überladen sind und teilweise eine hohe Einarbeitungszeit benötigen. Auch sind manche Lösungen recht kompliziert. Dann einen Fehler zu suchen dauert wiederum. Deshalb habe ich es bewusst aufs wesentliche reduziert.
Eine Funktion, die einfache Standard-SQL Befehle versteht, die Objekte danach ausrichtet und als Liste wieder zurückgibt. Man muss sich also nicht wieder in etwas einarbeiten. Es soll auch keinesfalls ein Ersatz für eine Datenbank sein. Hätte mir auch Linq gewünscht. Vielleicht mit XE3 oder XEⁿ :wink: |
AW: TLinq<T>, eine generische Liste die einfache SQL Befehle ausführt
Zitat:
Und außerdem kranken die Generics aktuell immernoch an fehlerhafter type inference, wie ich heute wieder feststellen musste, die aber grundlegend für Features wie Linq notwendig ist. Barry schrieb schon an einigen Stellen, welche Probleme sie mit Lambdas aktuell haben, z.B. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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