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
Antwort Antwort
Elvis

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

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
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Data Binding

  Alt 29. Apr 2011, 22:14
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.
Ich frag mich, woher du weißt, welchen Ansatz ich verfolge.

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);
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!)
Ich habe in den letzten Tagen bereits mit einer Mischung aus Records/operator overloading und Invokable variant types herum experimentiert und war in der Tat in der Lage unäre und binäre Expressions sowohl in ihre String Repräsentationen umzuwandeln, als auch sie auszuwerten. Aber danke für den Hinweis mit den OleVariants. Werde ich mir mal anschauen.

Edit: Hast du eventuell ein kleines Beispiel, ob und wie ich die Operatoren für nen OleVariant überschreiben kann?
Edit2: Hab was gefunden in der Unit VarCmplx.pas (die seh ich heute zum ersten mal in meinem Leben )

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....
Ich will den Thread hier nicht in eine weitere Diskussion zu diesem Thema ausarten lassen, denn ich bin dessen überdrüssig. Nur soviel: eine Programmiersprache ist bis zu einem gewissen Grad nur so modern, wie die Programmierer, die sie nutzen. [ironie]Wenn die Mehrzahl der Delphianer immernoch in ihren Höhlen hausen wollen und mit Delphi 7 Software Praktiken aus dem letzten Jahrtausend praktizieren, bitte[/ironie]. Ich nutze gerne alle Möglichkeiten, die sich mir bieten, um auch das letzte aus der Sprache herauszubekommen, auch wenn ich bloß zu nem VS2010 (Express) greifen müsste, und gleich alles serviert bekomme. Aber wo bliebe da der Spaß?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (29. Apr 2011 um 22:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Domo Sokrat
Domo Sokrat

Registriert seit: 14. Mai 2003
Ort: Wehrheim / Ts.
235 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Data Binding

  Alt 2. Mai 2011, 12:34
Hi Stevie,

ich find's prima, dass sich jemand drum kümmert, Delphi ein wenig moderner zu machen und innovative Konzepte, wie z. B. das WPF-Databinding von .NET in Abwandlung nach Delphi zu portieren (INotifyPropertyChanged find' ich übrigens klasse , obwohl's manchmal nervt).

Und: Ja, .NET-Entwickler haben (manchmal auch) innovative Konzepte, die sich durchsetzen! Wieso also diese nicht umsetzen, wenn man die Möglichkeiten hat? Seinerzeit wurden die Zeos-Komponenten ja auch aus der Java-Welt portiert ...

Und: Ja, D7 ist Steinzeit - Ich merk's jedes Mal wieder! So! Mehr sach' ich nicht dazu

Grüße und weiter so

M.
Michael Seeger
Vergesst nicht: Es wird überall nur mit Wasser gekocht
ZEOSLib - Admin-Team
ZeosLib-Forum
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Data Binding

  Alt 3. Mai 2011, 22:45
Ich hab den Data Bindings nun ein Designtime Package verpasst, so dass man sie mit dem Objektinspector editieren kann.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (18. Jun 2011 um 18:30 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:57 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