AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Data Binding
Thema durchsuchen
Ansicht
Themen-Optionen

Data Binding

Ein Thema von Stevie · begonnen am 28. Apr 2011 · letzter Beitrag vom 28. Apr 2017
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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-2025 by Thomas Breitkreuz