Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Fastreport Variable auslesen (https://www.delphipraxis.net/163071-fastreport-variable-auslesen.html)

ibp 14. Sep 2011 17:32

Fastreport Variable auslesen
 
Hi,

wie man eine Variable vom Programm nach FR übergibt oder ausliest ist kein Problem.
Nun will ich aber die Variable im Report ändern und das klappt irgendwie nicht.

Code:
report.variables['MyVar']:=''''+'some text'+'''';
Speichert den Text "some text" zwar in MyVar aber ohne '. Anscheinend übersetzt die Skriptengine '''' nicht richtig!

Hat jemand eine andere Idee wie man einen String per FR-Skript in eine Variable speichert?

LG

R.

RWarnecke 14. Sep 2011 17:54

AW: Fastreport Variable auslesen
 
Funktioniert da QuotedStr ?

Union 14. Sep 2011 18:11

AW: Fastreport Variable auslesen
 
Mit QuotedStr und Literal funktioniert beides:
Delphi-Quellcode:
frxReport1.Variables['MyVar'] := QuotedStr('Von Außen');
frxReport1.Variables['MyVar'] := ''''+'Von Außen'+'''';

ibp 14. Sep 2011 19:08

AW: Fastreport Variable auslesen
 
innerhalb der FR Skripte gibt es leider kein QuotedString.

Nochmal ich möchte innerhalb des FR-Skriptes die Variable verändern nicht von dem aufrufenden Programm aus!

MaBuSE 14. Sep 2011 19:16

AW: Fastreport Variable auslesen
 
Zitat:

Zitat von Union (Beitrag 1124389)
Mit QuotedStr und Literal funktioniert beides:

Ich glaube, er wollte etwas anderes wissen.
Er will warscheinlich wissen, wie es im Report geht.

Von außen können Variablen mit Werten belegt werden. Das ist kein Problem.

Von innen sieht es etwas anders aus.

Delphi-Quellcode:
procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
  Report.Variables.Variables('test') := '''von innen''';
  Report.Variables['XXX'] := '''YYY''';
end;

begin
end.
Das funktioniert beides, Variable Test ist im Report definiert und wird gesetzt. Variable XXX ist im Report nicht definiert, kann aber trotzdem gesetzt und (z.B. im Memo) ausgelesen werden.

Im Report kann die Variable ausgegeben werden. (z.B. mit folgendem Text in einem TfrxMemoView: [XXX] bzw. [test])

ABER, diese Werte sind NICHT von außen (Delphi) verfügbar. Es erscheint nur die definierte Variable test mit dem vorher übergebenen Wert.

Wir verwenden "FastReport 4 Enterprise Edition".
Ich hoffe die Info hilft Dir.

Union 14. Sep 2011 19:20

AW: Fastreport Variable auslesen
 
Aber auch in FScript geht es (nur nicht mit QutedStr):
Delphi-Quellcode:
Report.variables['myVar'] := ''''+'Von drinnen'+'''';

ibp 14. Sep 2011 19:46

AW: Fastreport Variable auslesen
 
Zitat:

Zitat von MaBuSE (Beitrag 1124401)
ABER, diese Werte sind NICHT von außen (Delphi) verfügbar. Es erscheint nur die definierte Variable test mit dem vorher übergebenen Wert.

Mist und genau das brauche ich....

Jemand eine Idee wie ich Infos von innen nach außen transportieren kann?


Das Problem scheint die Zuweisung zu sein. Wenn man "innen" die Variable definiert und dann in dem "Definitions-Fenster" den Ausdruck der Variable festlegt, dann kann man sie auch von außen auslesen.

Was mir dabei auffällt ist, dass die vordefinierte Variabel beim ausgeben innen mit showmessage(<MyVar>) dann der Inhalt inklusiv Hochkommas ausgegeben wird, wenn ich den Wert innen im Skript zuweise wird er ohne Hochkommas ausgegeben!

Hmm

Sir Rufo 14. Sep 2011 19:53

AW: Fastreport Variable auslesen
 
Also im FastReport werden die Werte der Variablen als Ausdrücke behandelt.

Somit ergibt der zugewiesene Variablenwert
Code:
'Mein' + ' ' + 'Test'
als Ergebnis
Code:
Mein Test
Es wird also eine String-Verknüpfung durchgeführt.

Will man also einen QuotedStr
Code:
'Mein Test'
als Ausgabe haben, dann wie folgt zuweisen:
Delphi-Quellcode:
Report.variables['myVar'] := '''''Mein Test''''';
alternativ sollte auch funktionieren
Delphi-Quellcode:
Report.variables['myVar'] := '"''Mein Test''"';

ibp 14. Sep 2011 20:05

AW: Fastreport Variable auslesen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1124408)
Delphi-Quellcode:
Report.variables['myVar'] := '''''Mein Test''''';
alternativ sollte auch funktionieren
Delphi-Quellcode:
Report.variables['myVar'] := '"''Mein Test''"';

hatte ich auch gedacht, leider funktioniert das nicht, es wird jeweil mit Fehlermeldungen quittiert!

Code:
...Fehler im Ausdruck ''''Mein Test'''': Expression expected

MaBuSE 14. Sep 2011 20:08

AW: Fastreport Variable auslesen
 
Zitat:

Zitat von MaBuSE (Beitrag 1124401)
Delphi-Quellcode:
...
  Report.Variables.Variables('test') := '''von innen''';
  Report.Variables['XXX'] := '''YYY''';
...

Anmerkung:

Es funktioniert auch der folgende Zugriff auf Variablen in FR:
Delphi-Quellcode:
...
  Report.Variables['XXX'] := '''Das ist ein Test''';
  ShowMessage( <XXX> ); // gibt Inhalt von XXX aus;
  ShowMessage( Get(XXX) ); // gibt Inhalt von XXX aus;
  Set('XXX', '''Test'''); // XXX wird 'Test' zugewiesen.
...
Es gilt aber das gleiche wie bei den oben genannten Varianten.

ibp 14. Sep 2011 20:21

AW: Fastreport Variable auslesen
 
ok hmmm

Gibt es noch eine andere Möglichkeit Informationen von innen nach außen zu transportieren?

Sir Rufo 14. Sep 2011 20:29

AW: Fastreport Variable auslesen
 
Also so geht es :)
Delphi-Quellcode:
  Report.Variables['test'] := '''''''Hallo''''''';
Folgender Wert müsste im Variablen-Editor eingegeben werden
Code:
'''Hallo'''
Und nun muss man alle Quotes verdoppeln und dann nochmal in Quotes einschließen

ibp 14. Sep 2011 20:45

AW: Fastreport Variable auslesen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1124416)
Also so geht es :)
Delphi-Quellcode:
  Report.Variables['test'] := '''''''Hallo''''''';
Folgender Wert müsste im Variablen-Editor eingegeben werden
Code:
'''Hallo'''
Und nun muss man alle Quotes verdoppeln und dann nochmal in Quotes einschließen

stimmt ABER leider ist es so wie es MaBuSe schon geschrieben hatte, dass man von außen den Wert innen nicht abrufen kann. :cry:

Daher suche ich eine andere Lösung!

MaBuSE 14. Sep 2011 20:48

AW: Fastreport Variable auslesen
 
Zitat:

Zitat von ibp (Beitrag 1124415)
ok hmmm
Gibt es noch eine andere Möglichkeit Informationen von innen nach außen zu transportieren?

Doch es geht.
Ich habe eine Möglichkeit gefunden.

gib mir ein paar Minuten, dann bastele ich Dir ein Beispiel...

MaBuSE 14. Sep 2011 21:01

AW: Fastreport Variable auslesen
 
Zitat:

Zitat von MaBuSE (Beitrag 1124420)
gib mir ein paar Minuten, dann bastele ich Dir ein Beispiel...

Folgendes Minimalbeispiel:
  1. Erzeuge eine neue Anwendung.
  2. Lege ein TfrxReport darauf.
  3. [RechtsKlick] -> "Edit Report..."
  4. Es öffnet sich der Report Designer
  5. Auf den Tab mit "Code" klicken
  6. FR wechselt zum Code Editor
  7. Folgenden Code eingeben:
    Delphi-Quellcode:
    var
     s: string;

    begin
      s := 'Test';                              
    end.
  8. Designer schließen
  9. Einen TButton auf das Delphi Form legen
  10. und folgenden Code auf das OnClick Ereignis legen:
    Delphi-Quellcode:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      frxReport1.ShowReport;
      Caption := frxReport1.Script.Variables['s'];
    end;
  11. Programm Compilieren und Starten
  12. Button drücken
  13. -> Report Vorschau öffnet sich -> schließen
  14. -> Caption bekommt den Wert Test
  15. :thumb:

Das geht in beide Richtungen !!!
ABER: Beim Zuweisen mit
Delphi-Quellcode:
frxReport1.Script.Variables['s'] := 'Hurra';
wird die Variable s definiert. Das bedeutet sie darf nicht mit
Delphi-Quellcode:
var s: string
definiert sein.

Aber das ist durchaus verschmerzbar, oder? :-D

Ich hoffe das löst Dein Problem.

ibp 14. Sep 2011 21:43

AW: Fastreport Variable auslesen
 
@MaBuSe

Danke in die nähe von F, klappt sehr gut! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 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