Softwareentwicklung mit Delphi

Softwareentwicklung mit Delphi

Posts 1-4 of 4
  • Michael Schindler
    Michael Schindler    Premium Member   Group moderator
    The company name is only visible to registered members.
    Language Integrated Query (LINQ)
    LINQ aus Wikipedia, der freien Enzyklopädie

    LINQ ist die Abkürzung für Language INtegrated Query. Es handelt sich um eine von Microsoft entwickelte Methode um SQL-, XLink- und XQuery-Abfragen direkt in eine andere Programmiersprache wie etwa C# 3.0, VB.Net und Java als Code statt als String einzubinden.

    Dies hat den Vorteil, dass der Code durch den Compiler auf Fehler geprüft und optimiert werden kann.


    Microsoft: http://msdn.microsoft.com/netframework/future/linq/

    Danny Thorpe (Borland) über die Integration in Delphi: http://blogs.borland.com/dcc/archive/2005/09/15/21195.aspx
    This post was modified on 23 Sep 2005 at 03:56 pm.
  • User photo
    Hubert Peters
    The company name is only visible to registered members.
    Re: Language Integrated Query (LINQ)
    Hallo Herr Schindler,

    mit LINQ habe ich mich auch mal eine Zeitlang beschäftigt und
    das Thema wieder in die Ecke gestellt. Die Nachteile sind meiner Meinung
    nach zu groß, besonders bei Projekten die mehr als 2-3 Programmierer
    benötigen. Ich finde es macht auch keinen Sinn Funktionalitäten die eine
    RDBMS schon abdeckt in die Programmierung mit einzubringen und
    somit das Rad neu zu erfinden.
    Bei Änderungen am Datenmodell ist LINQ einfach nicht flexible genug.
    Wenn ein Projekt viele gleiche, sich nicht großartig ändernde Abfragen
    enthält, ist man mit StoredProc Funktionen warscheinlich besser bedient.
    Eine Mehrbelastung für die DB ist das eigentlich auch nicht und die
    Ergebnismenge kann in einem Programme flexible abgefragt werden.
    Ein weiterer Vorteil ist auch das man Feldnamen ändern kann und muß nur
    die SP änderen, da ja das Ergebnisfeld anders heißen kann als das Tabellenfeld.

    Also ich denke LINQ ist wieder so ein Spielzeug von MS genauso wie .NET.
    Keiner bracht es aber einige tuen's weil Microsoft draufsteht.

    Michael Schindler schrieb:
    LINQ aus Wikipedia, der freien Enzyklopädie

    LINQ ist die Abkürzung für Language INtegrated Query. Es handelt sich
    um eine von Microsoft entwickelte Methode um SQL-, XLink- und
    XQuery-Abfragen direkt in eine andere Programmiersprache wie etwa C#
    3.0, VB.Net und Java als Code statt als String einzubinden.

    Dies hat den Vorteil, dass der Code durch den Compiler auf Fehler
    geprüft und optimiert werden kann.


    Microsoft: http://msdn.microsoft.com/netframework/future/linq/

    Danny Thorpe (Borland) über die Integration in Delphi:
    http://blogs.borland.com/dcc/archive/2005/09/15/21195.aspx
    This post was modified on 02 Oct 2005 at 01:42 pm.
  • Michael Schindler
    Michael Schindler    Premium Member   Group moderator
    The company name is only visible to registered members.
    Re^2: Language Integrated Query (LINQ)
    Hallo,
    wir haben ein grosses Projekt mit mehreren Entwicklern am laufen. Als Datenbank verwenden wir Oracle. Alle SQL´s sind in einer eigenen Datenbanktabelle abgelegt und werden via Stored Procedures selektiert und verwendet.

    Aus meiner Sicht hat LINQ in diesem Projekt Vor- und Nachteile.

    Ich bin Ihrer Meinung dass man nicht unbedingt die bereits weit entwickelte Funktionalitäten von PL/SQL in Delphi direkt integrieren muss. Wahrscheinlich würden auch Funktionen von PL/SQL der Standardisierung weichen müssen.

    Auf der anderen Seite sind die "Leichtsinnsfehler" bei der Verwendung von SQL ungebremst. Feldnamen stimmen nicht, Operator vergessen etc. Mit einem Compiler wäre dieses Problem gelöst.

    Fazit: Für RDBMS Systeme sehe ich die Integration von SQL in der IDE nicht zwingend.

    ABER:

    Das LINQ Projekt deckt auch einen Bereich ab den ich für sehr interessant halte:

    --> IEnumberable

    Die Query deckt nicht nur RDBMS und XML ab sondern funktioniert auch mit Arrays und Aufählungstypen.

    Mit LINQ sehe ich die Möglichkeit aus der Welt der Schleifen (for ... count-1... if...then...exit) auszubrechen und einen komfortableren Weg zu gehen.

    Hier ein Beispiel gefunden bei MSDN:

    ...
    string[] names = { "Burke", "Connor", "Frank",
    "Everett", "Albert", "George",
    "Harris", "David" };

    IEnumerable<string> expr = from s in names
    where s.Length == 5
    orderby s
    select s.ToUpper();

    foreach (string item in expr)
    Console.WriteLine(item);
    ...

    Gruss,
    M.Schindler
  • User photo
    Hubert Peters
    The company name is only visible to registered members.
    Re^3: Language Integrated Query (LINQ)
    Hallo Herr Schindler,

    was die Schleifenbildung betrifft gebe ich Ihnen vollkommen recht, ich meine
    selbst wenn man zehn Jahre Datenbankschleifen programmiert hat vergist man
    schon mal an .Next :-) und wundert sich dann warum es nicht funktioniert.
    Ich habe in den vergangen Jahren viele Programmiersprachen benutzt unteranderm auch GemBase. Dieses ist eine SQL Hochsprache die unter anderm
    eine Funktion enthält die eine Automatische Schleife generiert wenn man den
    Tabllennamen mit in den Funktionsheader aufnimmt.
    So etwas vermisse ich unter Delphi bzw auch als LINQ Funktion.

    Aber denken Sie nicht auch das eine einfacher SQL Compiler soetwas genauso
    hinbekommen würde?
    Ich habe eine Workflow-Engine entwickelt die zur Designzeit alle verwendeten SQL
    und SP's überprüft. Auch die verwendeten Feldname werden gegen die Abfrage
    gemerged, das reicht eigentlich schon volkommen aus. Somit benötigt man
    eigentlich keinen eigenen Zwischenspeicher für die Abfragen. Und bzgl. eines
    while .. next konstruktes ist mir nicht klar warum die compiler dass nicht selber
    umsetzten da ich ja in der while Bedingung schon auf EOF abfrage und wenn
    keine ezplizietes next kommt ist es halt vom compiler immer an den schluß der while schleife zu setzen.

    Ich habe mir für Arraydurchläufe eine eigene Funktion geschrieben die aus
    PHP stammt und foreach heißt (Allerdings in assembler damit der rücksprung in die eigentliche schleife wieder Funktioniert). Durch den Aufruf foreach(arrayname, keyname, value) brauche ich mich auch nicht mehr um die Länge des Array's zu kümmern und erhalte den Wert und bei einem mehrdem. Array den Zeigenamen zurück.

    Aber nichts destro trotz will ich nicht LINQ kapput reden, wird sich sicherlich
    noch ein wenig verbessern.