Thema: Data Binding

Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Data Binding

  Alt 29. Apr 2011, 21:53
da haperts aber für die Generierung von vernünftigen SQL Statements (abgesehen von nem full table select) noch etwas. Vor allem Mangels ExpressionTrees der delegates, die in .Net "einfach" in SQL umgebaut werden. Bisher gehen einfache Abfragen aber komplette Codegenerierung für Datenklassen über Metadaten aus nem SQL Server Datenbank Schema ist bereits implementiert.
Wenn du dort auch nur ansatzweise irgendwohin kommen willst, mussu den Ansatz, den du da gerade hast wegwerfen.
Wenn du wissen willst, was wie gefiltert wird, könntest du IDispatch-Implementierungen bauen, die vom User als OleVariant benutzt werden (aka C# dynamic).
Auf die Art solltest du alle Calls abgreifen können. Du musst halt immer nach jeder Operation ein neues IDispatch zurückgegeben, welches alle vorher aufgezeichneten Operation kennt.

Habe Delphis komische Syntax für Lambdas nicht im Kopf, aber stelle dir eine extension method vor, die Delphis Gegenstück zu Func<OleVariant, Boolean> schluckt.
Der OleVariant, der dort übergeben wird, wäre also nicht das jeweilige Item der Liste. Nope, du würdest die anonym. Method sofort ausführen, da DEIN OleVariant ja alle auf ihn angewandten Operationen aufzeichnet.

Delphi-Quellcode:
YourTable.Where(function(row : OleVariant) : Boolean;
begin
  exit((row.SomeColumn = 1) and (row.SomeOtherColumn <> 'Test' );
end).Select(procedure(const row, result : OleVariant);
begin
  result.ResultField1 := row.Field1;
  result.Abc := 1;
  result.Def := row.Field2;
end);
Code:
SELECT t.Field2 as ResultField1, 1 as Abc, t.Field2 as Def
from ...
where t.SomeColumn = 1 and t.SomeOtherColumn <> 'Test'
Die Where Clause:
OleVariant (OV) 1: Ergebnis von row.SomeColumn
OV 2: Ergebnis von OV1 = 1
OV 3: Ergebnis von row.SomeOtherColumn
OV 4: Ergebnis von OV3 <> 'Test'
OV 5: Ergebnis von OV2 and OV4

Sollte IMHO möglich sein.
Natürlich gehen auf der Basis noch ganz andere Sachen, für die in .Net ExpressionTrees benutzt werden. (Mocking Setups!)

Aber mache all das nur solange es dir wirklich Spass macht. Du kannst Delphi nicht in etwas Modernes verwandeln.
Jede dieser Lösung wird einen schalen Beigeschmack haben, und dem Dev, der es einsetzt wird dabei ständig ein kleines Männchen dezent mit einem Holzhammer von innen an die Schädeldecke schlagen um dabei unaufhörlich "HACK! HACK!" brüllen....
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”

Geändert von Elvis (29. Apr 2011 um 22:08 Uhr)
  Mit Zitat antworten Zitat