![]() |
Fastreport - Variable übergeben
Hallo,
ich möchte von Delphi aus eine Variable zum Fastreport (Version: 4.12.6) übergeben & dort z.B. anzeigen. Auf der Fastreport Seite in den FAQ habe ich folgendes gefunden: Question: How can you transfer an array of variables from Delphi into FR ?
Delphi-Quellcode:
Ich habe auch solchen Code gefunden:
var
a : variant; begin a := VarArrayOf([1,2,3]); frxReport1.Script.Variables['a'] := a; end;
Delphi-Quellcode:
Compilieren kann ich obigen Code. Wie greife ich jetzt innerhalb von FR darauf zu ?
frxReport1.Variables['My Variable 1'] := 10;
frxReport1.Script.AddVariable('WPath', 'String', ExtractFilePath(ParamStr(0))); <strike>Die Seite ![]() Die en zeigt was an: ![]() Aus der Programmhilfe im Fastreport OrdnerDoc werde ich nicht schlau. Finde die Hilfe schlecht gemacht. Grüße user0815 |
AW: Fastreport - Variable übergeben
Hi,
Fastreport Designer öffnen, Report laden. Unter Report - Variablen die Variable anlegen (zuerst eine neue Kategorie, dann die Variable) und den Namen vergeben. Diese kannst Du dann innerhalb FR wie ein DB-Feld verwenden bzw. über Get/Set in einem Script Werte auslesen / zugreifen. Wert von Delphi aus setzen hast Du ja schon.... GRüße |
AW: Fastreport - Variable übergeben
Klappt. Geht das nur mit Strings ?
Wie kann ich get / set nutzen? Wo finde ich dazu die entsprechende Dokumentation? Habe eben mal das "FR4.6.ProgrammerManual-en" nach "set" durchsucht & nichts brauchbares gefunden. Das ganze muss doch irgendwo Dokumentiert sein. |
AW: Fastreport - Variable übergeben
hm.. FastReport und Dokumentation ist so ne Sache ;-)
FR4.6.UserManual-en.pdf Seite 31 (37 im PDF) Grundlagen Seite 90/91 (96/97 im PDF): Anwendung von Variablen im Script und bzgl. "Geht das nur mit Strings": Da musst Du aufpassen! String genrell mit QuotedStr() einpacken, da FR wirklich her geht und den Namen mehr oder weniger nur mit dem Wert der Variable ersetzt (wenn Du diese wie ein DBFeld verwendest). Da der Typ einer Variable innerhalb Delphi als Variant zugreifbar ist, kannst DU da theoretisch alles übergeben, musst es halt auf der FR Seite entsprechend auswerten... Grüße |
AW: Fastreport - Variable übergeben
FR4.6.ProgrammerManual-en:
Adds a variable to the specified category
Delphi-Quellcode:
procedure AddVariable(const ACategory, AName: String; const AValue: Variant);
funktioniert auch (ob das gewollt ist ?):
Delphi-Quellcode:
Jetzt im Report in ein Memo Feld (TfrxMemoView) den jeweiligen Wert von ACategory in eckigen Klammern eintragen z.B.: [AAA]frxReport1.Script.AddVariable('AAA', '', QuotedStr('ABC')); frxReport1.Script.AddVariable('BBB', '', 'DEF'); frxReport1.Script.AddVariable('BBB', '', 'BLA'); // wird ignoriert frxReport1.Script.AddVariable('YYY', 'unnecessary', QuotedStr('456')); frxReport1.Script.AddVariable('ZZZ', 'unnecessary', '789'); Ausgabe in diesem Fall: 'ABC' DEF '456' 789 |
AW: Fastreport - Variable übergeben
ich habe fast alle meiner Drucks auf eine Generische Unit umgestellt der Datasets, Variablen, Reports, Callbacks etc.
im Execute mitgegeben werden, der Variablenteil sieht so aus ....
Delphi-Quellcode:
Procedure TDM.PrintEttis;
var vars: TFrxVariables; ... begin vars := TFrxVariables.Create; try for i := 0 to FReportingList.Count - 1 do begin With vars.Add do begin Name := FReportingList.Names[i]; Value := QuotedStr(FReportingList.Values[i]); end; end; ... ... TFPrintF.Execute(... ,vars, .... .... end; TFPrintF.Execute(... ,vars, .... ....); begin .... for i := 0 to Report.Variables.Count - 1 do begin Report.Variables.Items[i].Value := QuotedStr(''); end; if Assigned(Variables) then for i := 0 to Variables.Count - 1 do begin k := Report.Variables.IndexOf(Variables.Items[i].Name); if k > -1 then Report.Variables.Items[k].Value := Variables.Items[i].Value else begin with Report.Variables.Add do begin Name := Variables.Items[i].Name; Value := Variables.Items[i].Value; end; end; end; .... end; |
AW: Fastreport - Variable übergeben
Zitat:
|
AW: Fastreport - Variable übergeben
Es soll auch Anwendungen geben, die die Möglichkeit bieten, den Report erst zur Laufzeit designen zu lassen lassen. Und da ist es auch praktisch, dynamisch einzelne Variablen zur Laufzeit zu deklarieren.
|
AW: Fastreport - Variable übergeben
Hallo,
normalerweise verwende ich List&Label aber jetzt habe ich ein sehr kleines Projekt mit einer einzigen Liste, und da ist L&L etwas overkill. Weil FR bei Delphi dabei ist, habe ich es mal damit probiert, und bin aufgrund der Anforderung zusätzlich eigene Variablen deklarieren zu müssen über Google auf diesen Thread gestoßen. So deklariere ich die Variablen:
Delphi-Quellcode:
Das funktioniert auch. Aber, wenn ich bereits einmal gedruckt habe, und sich der Wert einer dieser definierten Variablen ändert, z.B. die GESAMTSTUNDEN, und ich nochmals drucke, wird nicht der neue Wert gedruckt, sondern immer der Wert den die Variable beim ersten Ausdruck hatte. Erst wenn ich das Programm neu starte, wird der richtige Wert wieder gedruckt.
procedure TForm1.AddVariable(aName, aValue: string);
begin FR.Script.AddVariable(aName, '', aValue); end; ... AddVariable('USERNAME', FUserName); AddVariable('DRUCKMONAT', cbDruck.Text+' ' + cbJahr.Text); AddVariable('GESAMTSTUNDEN', FormatDateTime('hh:mm', FGesamtStunden)); Weiß jemand, woran das liegen könnte? BTW das Handbuch ist in dieser Hinsicht wirklich nicht zu gebrauchen :pale: |
AW: Fastreport - Variable übergeben
Warum?
Man könnte natürlich erstmal in den Quellcode gucken und sieht das Warum. :zwinker:
Delphi-Quellcode:
Entweder du suchst eine Set-Funktion (Ich hab Keine in TfsScript gesehn)
procedure TfsScript.AddVariable(const Name, Typ: String; const Value: Variant);
var v: TfsVariable; begin if Find(Name) <> nil then Exit; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< v := TfsVariable.Create(Name, StrToVarType(Typ, Self), Typ); v.Value := Value; v.OnGetVarValue := FOnGetVarValue; Add(v.Name, v); end; oder du machst vorher ein "Clear". Wir machen es so, wobei wir Clear nur aufrufen, da auch innerhalb der Scripte weitere Variablen angelegt werden, die Zuweisung an Variables überschreibt auch so Werte, wenn die Variable vorher schonmal zugewiesen wurde.
Delphi-Quellcode:
Aber eigentlich machen wir das so
FR.Variables.Clear;//alles alte Zeug löschen
FR.Variables['USERNAME'] := FUserName; ...
Delphi-Quellcode:
, wobei ich grade nicht mehr weiß, warum die "Strings" unbedingt als "String" gequotet werden mussten.
FR.Variables['USERNAME'] := '''' + FUserName + '''';
(bin bei uns nicht für die Reports zuständig, aber irgendeinen "wichtigen" Grund hatte es) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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