Autor |
Beitrag |
mira
      
Beiträge: 22
WIN 7 prof. 64bit
Delphi XE
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 05.08.12 10:00
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.
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 
      
Beiträge: 22
WIN 7 prof. 64bit
Delphi XE
|
Verfasst: 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:
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 Martok: Delphi-Tags hinzugefügt
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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
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 
      
Beiträge: 22
WIN 7 prof. 64bit
Delphi XE
|
Verfasst: So 05.08.12 16:10
Schon wieder großer Danke!!!
Den Report rufe ich in einer eigenen Procedure "Drucken" auf.
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 Martok: Delphi-Tags hinzugefügt
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 05.08.12 17:05
k soll nur sicher stellen daß die Variable auf die Du zugreifen möchtest existiert.
Du kannst auch:
Delphi-Quelltext 1:
| frxreport1.variables.Variables['Variablenname'].value := QuotedStr(Inhhalt); |
verwenden ....
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
mira 
      
Beiträge: 22
WIN 7 prof. 64bit
Delphi XE
|
Verfasst: So 05.08.12 17:20
Diese Änderung bring zur Laufzeit einen Fehler, Debugger-Exeption.
EVariantInvalidOpError....Ungültige Variantenoperation...
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 22
WIN 7 prof. 64bit
Delphi XE
|
Verfasst: So 05.08.12 17:49
Fehlermeldung bleibt Gleich
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 05.08.12 20:19
das kommt davon, wenn man ohne Delphi versucht es aus dem Gedächtnis zu machen, sorry ...
Delphi-Quelltext 1: 2: 3: 4: 5:
| frxreport1.LoadFromFile('C:\temp\test.fr3'); frxreport1.Variables.Items[frxreport1.variables.IndexOf('Variablenname')].value := QuotedStr('Inhalt') ; 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 
      
Beiträge: 22
WIN 7 prof. 64bit
Delphi XE
|
Verfasst: 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
      
Beiträge: 792
Erhaltene Danke: 49
Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
|
Verfasst: 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 
      
Beiträge: 22
WIN 7 prof. 64bit
Delphi XE
|
Verfasst: 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
|
|