Autor Beitrag
mira
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

WIN 7 prof. 64bit
Delphi XE
BeitragVerfasst: So 05.08.12 09:50 
Guten Tag,

Ich hoffe wieder auf Hilfe....

In meinem Projekt werden aus einer Access-Datenbank Daten mit ADO-Komponeten ausgelesen.
Es werden alle z.B. Rechnungssummen addiert und als String-Variable in ein TEdit-Feld geschrieben.
Das heißt erst zur Laufzeit wird die Variable mit Inhalt gefüllt.
Wie ist es möglich diese Variable in Fastreport auszugeben.

Habe seit zwei Tagen viele Hilfen durchsucht, aber leider kein einfaches Beispiel gefunden.
In einem anderen Projekt habe ich mit frxDataset direkten Zugriff auf die Datenbank, da hat das reletiv einfach funktioniert.

Danke im Voraus

mira
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 05.08.12 10:00 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
          with Report.Variables.Add do
          begin
            Name := 'MeineVariable';
            Value := 'DerWert';
          end;


gegf. Value mit QutedStr

Falls Du bereits im Report Variablen definiert hast kannst Du deren Wert auch setzen.
Ich verwende in einer generischen Routine, welche verwendet wird Reports aus Listen von Querys, Definitionen, Callbacks, Variablen, dynamisch zu erstellen ... , Design findet im Programm zur Laufzeit statt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
    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;


    with Report.Variables.Add do
      begin
        Name := 'ReportFileName';
        Value := QuotedStr(FReportName);
      end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
mira Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

WIN 7 prof. 64bit
Delphi XE
BeitragVerfasst: So 05.08.12 15:40 
Erst mal Danke für so schnelle Reaktion.

Mein Report heißt: frxReport1
Name der Variablen soll Rechnungssumme sein.
Der Wert der Variablen im Programm ist gessumstr (Abkürzung für gesamtsummen-string)

Habe im Code folgendes eigetragen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
      with frxReport1.Variables.Add do
          begin
            Name := 'Rechnungssumme';
            Value := 'gessumstr';
          end;

Im Report kann ich aber die Variable Rechnungssumme nicht sehen.
Es kommt aber auch kein Fehler beim kompilieren.

Was tun?

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 05.08.12 15:53 
Rufst Du den Report mit rcDesign auf? Dann solltest Du die Variable unter Variablen sehen und einfügen können.
Wenn Du anders vorgehst, was ich vermute kann st Du dort anlegen und auf die Oberfläche ziehen, dann allerdings über

ausblenden Delphi-Quelltext
1:
2:
3:
        k := Report.Variables.IndexOf('Rechnungssumme');
        if k > -1 then
          Report.Variables.Items[k].Value :=  QuotedStr(gessumstr);

verwenden ....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
mira Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

WIN 7 prof. 64bit
Delphi XE
BeitragVerfasst: So 05.08.12 16:10 
Schon wieder großer Danke!!!

Den Report rufe ich in einer eigenen Procedure "Drucken" auf.

ausblenden Delphi-Quelltext
1:
2:
frxReport1.PrepareReport();
frxReport1.ShowPreparedReport;


rcdesign... kenne ich nicht gibts da einen Hilfelink zur Anwendung?

Habe den Code wie angegeben geändert.
Die Variable in Report neu erstellt, Memofeld mit Variable verknüpft.

Die Variable wird tatsächlich gedruckt.... oh Wunder!!??

Die Verwendung der Variablen k in der if/then Funktion ist mir nicht klar.
Ich habe natürlich mehrere Variablen. Was muss ich da machen?

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 05.08.12 17:05 
k soll nur sicher stellen daß die Variable auf die Du zugreifen möchtest existiert.
Du kannst auch:
ausblenden Delphi-Quelltext
1:
frxreport1.variables.Variables['Variablenname'].value := QuotedStr(Inhhalt);					

verwenden ....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
mira Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

WIN 7 prof. 64bit
Delphi XE
BeitragVerfasst: So 05.08.12 17:20 
Diese Änderung bring zur Laufzeit einen Fehler, Debugger-Exeption.
EVariantInvalidOpError....Ungültige Variantenoperation...
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 05.08.12 17:24 
Es wird davon abhängen wie die Variable verwendet wird, lass' mal das QuotedStr weg ...

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
mira Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

WIN 7 prof. 64bit
Delphi XE
BeitragVerfasst: So 05.08.12 17:49 
Fehlermeldung bleibt Gleich
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 05.08.12 20:19 
das kommt davon, wenn man ohne Delphi versucht es aus dem Gedächtnis zu machen, sorry ...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  frxreport1.LoadFromFile('C:\temp\test.fr3');
  frxreport1.Variables.Items[frxreport1.variables.IndexOf('Variablenname')].value := QuotedStr('Inhalt') ;
  //oder
  frxreport1.variables['Variablenname'] := QuotedStr('Inhalt') ;
  frxreport1.DesignReport;


Komponente frxDesigner auf das Form/Datenmodul legen ...

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS


Zuletzt bearbeitet von bummi am Mo 06.08.12 15:18, insgesamt 1-mal bearbeitet
mira Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

WIN 7 prof. 64bit
Delphi XE
BeitragVerfasst: Mo 06.08.12 14:40 
Klappt beides nicht.

Ich habe jetzt die Variante realisiert mit der Variablenabfrage k.
Damit geht es. Ich wäre mit dem Ergebnis zufrieden.
Bitte nochmal um eine kleine Erläuterung zum Code:

k := frxReport1.Variables.IndexOf('Variablenname');
if k > -1 then frxReport1.Variables.Items[k].Value := QuotedStr(Variablenwert);
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mo 06.08.12 15:17 
Hi,

mit der ersten Anweisung (k := frxReport1.Variables.IndexOf....) wird in der Liste der Variablen des Reports nach einer Variable namens "Variablenname" gesucht. Wird diese gefunden, wird der Index dieser Variable in der Liste zurück gegeben, wird nichts gefunden wird -1 zurückgegeben.

In der nächsten Anweisung wird dann k überprüft: Nur wenn k größer als -1 ist wird der Wert der Variable gesetzt, denn nur dann ist sie auch da...

SChau dir mal bei Gelegenheit die Hilfe bzw. Tutorials zu den Listen (TStringList, TObjectList) in Delphi an.

Grüße
mira Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

WIN 7 prof. 64bit
Delphi XE
BeitragVerfasst: Mi 08.08.12 07:44 
Ich möchte mich auf diesem Wege noch einmal für die sehr schnelle Problemlösung bedanken.
Es ist sehr Hilfreich jemanden zu kennen der sich Zeit nimmt, sogar am Sonntag Nachmittag.

Also ein großes Danke an das Team der Entwickler-Ecke.

Bis bald!

Michael