Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLBuilder (nonvisual) (https://www.delphipraxis.net/156183-sqlbuilder-nonvisual.html)

schlecki 23. Nov 2010 08:56

Datenbank: verschiedene • Version: n/a • Zugriff über: n/a

SQLBuilder (nonvisual)
 
Hallo,

ich suche einen SQLBuilder. Aussehen sollte das in etwa so:

Delphi-Quellcode:
  stm := TSQLStatement.Create();
  stm.Select('Field1')
     .Select('Field2')
     .From('Table')
     .Where(TCriteria.Create()
       .Criteria('Field1').EQ('test'))
     .OrderBy('Field2')
das Ergebnis sollte dann so aussehen:
Code:
  select Field1, Field2 from Table where Field1 = 'test' order by Field2
Hat jemand sowas schonmal gesichtet oder vlt sogar selbst gebaut?

Gruß
schlecki

s.h.a.r.k 23. Nov 2010 09:05

AW: SQLBuilder (nonvisual)
 
Habs mal in PHP gesehen, aber unter Delphi leider noch nie. Hab es schon mal selbst probiert, aber war mir dann zu kompliziert. Bin daher sehr schnell auf eine "normale" Query umgestiegen, d.h. halt einen String geschrieben. Das ist auch schneller änderbar imho.

Bernhard Geyer 23. Nov 2010 09:07

AW: SQLBuilder (nonvisual)
 
Es gibt doch auch ein paar OR-Mapper-Frameworks für Delphi. Wurde hier im Forum schon öfter verlinkt.

Neutral General 23. Nov 2010 09:09

AW: SQLBuilder (nonvisual)
 
Mal eine ganz blöde Frage nebenbei: Wofür soll sowas gut sein? :gruebel:

s.h.a.r.k 23. Nov 2010 09:35

AW: SQLBuilder (nonvisual)
 
Ist ganz nett, wenn man nicht selbst den Query-String aufbauen will, aber eigentlich reine Bequemlichkeit :wink: Aber sobald man an etwas komplexere Queries stößt ist das Konzept eher umständlich.

schlecki 23. Nov 2010 09:39

AW: SQLBuilder (nonvisual)
 
Ich habe hier eine, nun, gewachsene Anwendung. Da stehen so tolle sachen drin wie:

Delphi-Quellcode:
  Query := TQuery.Create(nil);
 
  Query.SQL.Add('select');
  Query.SQL.Add(' *');
  Query.SQL.Add('from');
  Query.SQL.Add(' table');
  Query.SQL.Add('where');
  Query.SQL.Add(' 1 = 1');
  Query.SQL.Add('order by');

{ ... viel später }
  Query.SQL[1] := 'third.field1, second.field2, table1.*';
  Query.SQL[3] := 'table1, table3 third, table4 second';
  Query.SQL[5] := 'table1.field = third.field and second.field2 = table1.field3';
  AddRightCondition(Query.SQL, {...});
  Query.SQL.Add('table1.field');
Mit diesen Objekten könnte man das mMn besser auseinandernehmen und ordnen.

Einen kompletten OR-Mapper kann ich hier nicht einsetzen. Mit dem Builder, wie er mir vorschwebt könnte man einzelne Bereiche der Query dann leichter modifizieren und am Schuß das SQL erzeugen lassen.

Naja, mal sehen, vlt werd ich da mal was zu bauen ;)

s.h.a.r.k 23. Nov 2010 09:41

AW: SQLBuilder (nonvisual)
 
Daher hasse ich diese TTable, TDataSource und was weiß ich noch alles... Einmal eine Query ausführen, die Daten in Objekte gießen und gut ist das ganze. Wenn ich was einfügen/updaten will, dann muss ich halt neben der Query auch noch die Daten weiterreichen und ab damit an die Datenbank.

schlecki 23. Nov 2010 09:45

AW: SQLBuilder (nonvisual)
 
das hat doch hier nix mit TTable oder TDataSource zu tun?!

webcss 23. Nov 2010 10:31

AW: SQLBuilder (nonvisual)
 
Das sieht aus wie LINQ unter .NET.
In der DeHL Library ist eine Klasse bzw. Interface enthalten, die LINQ-ähnliches verhalten bereitstellt. Anzuwenden allerdings auf Listen usw.

Im Rahmen eines ORM macht ein solcher QueryBuilder auch durchaus Sinn, aber in einer Anwendung welche auf TDataset und Konsorten basiert reicht ein FilterBuilder(=baut ein WHERE Statement zusammen) vollkommen aus. Denn kann man sich schnell selbst basteln, hab ich für mein ORM auch gemacht.

PS: macrobject's dobject hat das so gelöst wie Du Dir das vorstellst...

rokli 23. Nov 2010 10:36

AW: SQLBuilder (nonvisual)
 
Hi Schlecki,

ich schreibe soetwas dauernd ... aber wenn Du einer Function / Procedure die Feldnamen sowieso mitgeben musst, kannst das ganze doch gleich in einer Oberfläche macht.

Sonst kannst Du doch sowieso nur die gesamte Feldliste "automatisch" in das SQL Statement einlesen lassen; und wie siehts mit der WHERE Clause aus, woher bekommst Du die? Wie willst Du denn den ORDER definierten, wenn nicht manuell??

Mittlerweile schreib ich mir immer noch ein paar Zeilen dazu, damit ich die Statements speichern und auch wieder per Progi öffnen kann.

Gruß
Rolf


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz