Ich muss das leider ins OT stellen, da es keine fertige Unit ist.
In .NET gibt es ja Lambda-Expressions (für Linq). Damit ist es möglich, dass man z. B. eine Datenbank
where-Klausel inline im C#-Quelltext schreibt und diese dann zur Laufzeit in SQL umgewandelt bekommt. Im Prinzip geht das so, dass man zur Laufzeit den Code in der Lambda-Expression als Baumstruktur auslesen kann und diesen beliebig in SQL Statements oder was auch immer umwandeln kann.
Das geht (ein bisschen) auch in Delphi 32!
Folgender Code kompiliert und gibt den angegebenen String zurück:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| uses DB, Expressions;
{$apptype console}
var I: Integer; A: TValueExpression; B: TBooleanExpression; Field: TField; begin Field := TField.Create(nil); Field.FieldName := 'MyField';
I := 2; A := 1 + I; B := 3 < -A * 2 + Max(Field);
Writeln(B.ToString); Readln; end. |
Die dazu notwendige Unit ist im Anhang. Ich hab das jetzt nur schnell zusammengebastelt als "proof of concept". Man ist natürlich sehr eingeschränkt aber die Idee ist ganz interessant
Das ganze funktioniert nur mit einer neueren Version von Delphi (vermutlich ab 2006).