Autor Beitrag
NOS1971
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mo 03.02.14 20:08 
Hallo zusammen,

ich versuche einen Report zu generieren und habe es soweit im Griff das ich meine Texte etc. gesetzt bekomme. Nun bin ich an dem Punkt wo ich eine StringList ausgeben möchte und habe das entsprechend dem Beispiel auch alles in meine Software integriert mit dem Ergebnis dass das GetValue des Reports nicht aufgerufen wird. Die DataSet Compo ist auf dme Mainform vorhanden. Länge wird vor dem Erzeugen des Reports auch per Code gesetzt. Zum Schluss erscheint sooft wie ich in der StringList Werte habe der Name der Komponente. Dann habe ich gecheckt ob die GetValue Routine gecalled wird aber da passiert nix.

ANy idea ?

Grüße und Dank vorab,
Andreas
Einloggen, um Attachments anzusehen!
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 03.02.14 20:50 
Implementier mal OnNewGetValue des UserDataset... wird die aufgerufen?

Grüße
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mo 03.02.14 20:59 
user profile iconLemmy hat folgendes geschrieben Zum zitierten Posting springen:
Implementier mal OnNewGetValue des UserDataset... wird die aufgerufen?

Grüße


wird auch nicht aufgerufen ... die demo läuft aber einwandfrei ...

Hier mal mein Code der generate routine

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 // generate report routine
 tbpSpiderPager.ActivePageIndex := 2;

 KeywordList.RangeBegin := rbFirst;
 KeywordList.RangeEnd := reCount;
 KeywordList.RangeEndCount := MultiThreadedWebAnalyser.CompleteKeywordList.Count;

 // finally create the report
 Report.PreviewOptions.ThumbnailVisible := true;
 Report.ShowReport;


und die OnBeforePrint

ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure TfrmWebsiteSpider.ReportBeforePrint(Sender: TfrxReportComponent);
begin
 // first page
 if Sender.Name = 'memoAnalysisReportName' then
  TfrxMemoView(Sender).Text := sReportWebSiteAnalysisOf;
 if Sender.Name = 'memoAnalysisDomainName' then
  TfrxMemoView(Sender).Text := MultiThreadedWebAnalyser.AnalyseURL;
 if Sender.Name = 'memoAnalysisCreatedWith' then
  TfrxMemoView(Sender).Text := sReportCreatedWith;
 if Sender.Name = 'memoCreationDateLabel' then
  TfrxMemoView(Sender).Text := sReportCreatedAtDate + ':';
 if Sender.Name = 'memoCreationTimeLabel' then
  TfrxMemoView(Sender).Text := sReportCreatedAtTime + ':';
 if Sender.Name = 'memoCreationDate' then
  TfrxMemoView(Sender).Text := DateToStr(MultiThreadedWebAnalyser.StartTime);
 if Sender.Name = 'memoCreationTime' then
  TfrxMemoView(Sender).Text := TimeToStr(MultiThreadedWebAnalyser.StartTime) + ' ' + sReportClock;
 if Sender.Name = 'memoAnalysedDomain' then
  TfrxMemoView(Sender).Text := MultiThreadedWebAnalyser.AnalyseURL;
 if Sender.Name = 'memoAnalysedDomainLabel' then
  TfrxMemoView(Sender).Text := sReportAnalysedURL + ':';
 if Sender.Name = 'memoNeededTime' then
  TfrxMemoView(Sender).Text := TimeToStr(MultiThreadedWebAnalyser.StopTime - MultiThreadedWebAnalyser.StartTime) + ' (' + inttostr(SecondsBetween(MultithreadedWebAnalyser.StopTime, MultiThreadedWebAnalyser.StartTime)) + ' ' + sSeconds + ')';
 if Sender.Name = 'memoNeededTimeLabel' then
  TfrxMemoView(Sender).Text := sReportNeededTime + ':';
 if Sender.Name = 'memoURLBasicData' then
  TfrxMemoView(Sender).Text := sReportURLBasicData;
 if Sender.Name = 'memoAnalysedLinksLabel' then
  TfrxMemoView(Sender).Text := sReportAnalysedLinks + ':';
 if Sender.Name = 'memoAnalysedLinks' then
  TfrxMemoView(Sender).Text := IntToStr(MultiThreadedWebAnalyser.ProgressData.AnalysedCount);
 if Sender.Name = 'memoProcessedLinksLabel' then
  TfrxMemoView(Sender).Text := sReportProcessedLinks + ':';
 if Sender.Name = 'memoProcessedLinks' then
  TfrxMemoView(Sender).Text := IntToStr(MultiThreadedWebAnalyser.ProgressData.ProcessedCount);
 if Sender.Name = 'memoFoundKeywords' then
  TfrxMemoView(Sender).Text := IntToStr(MultiThreadedWebAnalyser.CompleteKeywordList.Count);
 if Sender.Name = 'memoFoundKeywordsLabel' then
  TfrxMemoView(Sender).Text := sDifferentFoundKeywords + ':';
 if Sender.Name = 'memoURLBasicData' then
  TfrxMemoView(Sender).Text := sURLBasicData;
 if Sender.Name = 'memoGlobalKeywordData' then
  TfrxMemoView(Sender).Text := sDifferentFoundKeywords;

end;
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 03.02.14 21:40 
nein, nochmal von vorne. Die Komponente "KeyWordList" - was ist das? Eine TfrxUserDataset? Dann implementier von dieser Komponente die OnNewGetValue - nix vom Report. Und selbstverständlich auch alle anderen notwendigen Ereignisse (OnFirst, ....) Damit iterierst Du durch deine Datenmenge und kannst die Daten an den Report senden.

Wenn Du nur einen Datensatz hast, dann kannst Du das auch über Variablen lösen, dann brauchst Du auch kein MasterDataset
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mo 03.02.14 22:00 
Also ...

KeywordList ist ein tfrxUserDataSet ... es kommen noch verschiedene stringgrids oder listen mit mehreren spalten dazu später ... hier ist es eine liste genutzter keywords einer url bzw einer gesamten gespiderten webseite

auch von dem DataSet wird weder GetValue noch NewGetValue aufgerufen
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 03.02.14 22:19 
Und die restlichen Events hast Du auch implementiert (OnCheckEOF, OnFirst, OnNext, onPrior)? Kannst Du mal das Projekt hier rein stellen oder ist das zu umfangreich?
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mo 03.02.14 22:22 
user profile iconLemmy hat folgendes geschrieben Zum zitierten Posting springen:
Und die restlichen Events hast Du auch implementiert (OnCheckEOF, OnFirst, OnNext, onPrior)? Kannst Du mal das Projekt hier rein stellen oder ist das zu umfangreich?


nein ... die anderen events habe ich nicht genutzt ... im moment, so als rookie, wüsste ich auch nicht was da rein sollte ... zum reinstellen ist es zu umfangreich ... ich nutze noch tms und andere compos und der spider etc. hängt auch mit drin
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 03.02.14 22:56 
Also, du hast eine Liste, z.B: deine Stringlist mit dem schönen Namen "Werte", dann brauchst Du noch einen Zeilenzähler z.B. AktuelleZeile

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
OnCheckEOF:

  AktuelleZeile >= Werte.Count;

OnPrior:
  
  Dec(AktuelleZeile);

OnNext:
  
  Inc(AktuelleZeile);

OnFirst:

  AktuelleZeile := 0;
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mo 03.02.14 23:01 
Wird das denn nicht in KeywordList.RecNo automatisch gehandelt ... ich hatte es so verstanden das ich dem datensatz sage wie er zählen soll und wie hoch die anzahl der einträge ist und er dann x mal das getvalue aufruft ... so ist es in der demo auch

bye the way sollte es auch so funzen das ich in der GetValue des Reports folgendes mache

ausblenden Delphi-Quelltext
1:
2:
 if CompareText(VarName, 'memoKeyword') = 0 then
  Value := MultiThreadedWebAnalyser.CompleteKeywordList[KeywordList.RecNo];


ich habe das gefühl irgendwas dummes fehlt noch was ich übersehe ... leider ist die docu an der stelle auch sehr dürftig gestaltet finde ich
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mi 05.02.14 17:17 
Und ich hatte Recht :-) ... es war mal wieder was total dummes ... es funktioniert einwandfrei über den report.getvalue event ... wichtig ist, und das war der einzige fehler, das der text des memos im masterdata band des reports mit dem namen "memoKeywordList" in eckige Klammern gefasst wird -> also "[memoKeywordList]"

Thats all :)