AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Array[..] of record mit FastReport in MasterDataBand ausgebe
Thema durchsuchen
Ansicht
Themen-Optionen

Array[..] of record mit FastReport in MasterDataBand ausgebe

Ein Thema von EccoBravo · begonnen am 8. Apr 2008 · letzter Beitrag vom 9. Apr 2008
Antwort Antwort
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#1

Array[..] of record mit FastReport in MasterDataBand ausgebe

  Alt 8. Apr 2008, 09:17
Hallo,

ich arbeite nicht mit DataBases, stattdessen mit Listen of record

Delphi-Quellcode:
type
    Tds = record
             a:string;
             b:string;
             c:string;
         end;
....

ds : array[1..n] of Tds;
Nun will ich im FastReport jedes Datenfeld des Arrays in ein MasterDataBand (eine Zeile)
ausgeben

....
MasterData
ds[i].a ds[i].b ds[i].c
....

Wenn ich die Größen in das OnGetValue Event eintrage wird nur eine Zeile (der erste Datensatz) im Report angezeigt.

Wie stelle ich das mit Script, frxUserDataSet und co. an?

Vielen Dank für Hilfe

E. B.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 11:03
Mit deinem Record und deinem Array bildest du ja im Grunde nur ein Dataset nach.
Du bist allerdings recht unflexibel, da du keine Suchfunktion (Locate) hast.
Löschen ist auch schwierig, denn es entsteht ja ein Loch und du musst alle restlichen Datensätze verschieben.

Es gibt aber auch Memory-Datasets, die deinen Record und das Array komplett ablösen.
Nachteil: dein Programm wird etwas "dicker" und das Einfügen von Daten etwas langsamer (im Millisekundenbereich, das spürt der User nicht)

Vorteile:
Problemlose Anbindung an FastReport
Such- und Filtermöglichkeiten durch das Dataset
Du kannst deine Daten problemlos in einem DBGrid anzeigen/editieren
Exportmöglichkeiten für deine Daten

In deiner Enterprise Version hast du ja das TClientDataset, was unter anderem ja auch ein Memory-Dataset ist.
http://delphi.about.com/od/usedbvcl/...entdataset.htm
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 12:14
Danke, danke,

ist so mit Records gewollt, Will ja nur Daten darstellen, nicht suchen und löschen.
Databases kann und darf ich nicht benutzen, da meine Programme auf Rechnern, die dem Medizinproduktegesetz unterliegen, laufen. Daher darf keine weitere DataBaseEngine laufen und die bereits laufende darf ich nicht mitbenutzen. Daher Datensammnungen nur als Filesystem möglich, welches ich mittels separater Filesammlung im Ini-Format mache.

Nun genug der Vorrede - werde Deinen Vorschlag nachher mal probieren und mich dann nochlam melden.

Bis denne

E. B.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 12:37
Du musst im User-Dataset noch die Ereignisse 'OnCheckEof', 'OnFirst' und 'OnNext' (eventuell 'OnPrior') setzen.
Code:
OnCheckEof: Eof := (Counter = Array.Size-1)
OnFirst: Count := 0
OnNext: Count := Count + 1;
Im OnGetValue beziehst Du dich dann einfach auf 'Array[Counter]'
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 15:57
Vielen Dank Alzaimar,

Vielen Dank!
Und genau dieser Code funktionierte bei mir nicht, deshalb habe ich angefangen zu fragen.

Ich sende Dir mal meinen Code

Delphi-Quellcode:
...
//..............................................................................
procedure TF_EB_Tagebuch_Tabelle.frxUserDataSet1GetValue(const VarName: string;
    var Value: Variant);
begin
    if VarName = 'Datumthen
        Value := StringGrid1.Cells[0, frxUserDataSet1.Tag]
    else if VarName = 'Zeitthen
        Value := StringGrid1.Cells[1, frxUserDataSet1.Tag]
    else if VarName = 'Typthen
        Value := StringGrid1.Cells[2, frxUserDataSet1.Tag]
    else if VarName = 'Patientthen
        Value := StringGrid1.Cells[3, frxUserDataSet1.Tag]
    else if VarName = 'FehlerIDthen
        Value := StringGrid1.Cells[4, frxUserDataSet1.Tag]
    else if VarName = 'Energiethen
        Value := StringGrid1.Cells[5, frxUserDataSet1.Tag]
    else if VarName = 'Fehlerthen
        Value := StringGrid1.Cells[9, frxUserDataSet1.Tag]
    else if VarName = 'Loesungthen
        Value := StringGrid1.Cells[10, frxUserDataSet1.Tag]
    else if VarName = 'Werthen
        Value := StringGrid1.Cells[6, frxUserDataSet1.Tag]
    else if VarName = 'SRthen
        Value := StringGrid1.Cells[7, frxUserDataSet1.Tag]
    else if VarName = 'TAthen
        Value := StringGrid1.Cells[8, frxUserDataSet1.Tag];
end;
//..............................................................................
procedure TF_EB_Tagebuch_Tabelle.frxUserDataSet1First(Sender: TObject);
begin
    frxUserDataSet1.Tag := 1;
end;
//..............................................................................
procedure TF_EB_Tagebuch_Tabelle.frxUserDataSet1Next(Sender: TObject);
begin
    frxUserDataSet1.Tag := frxUserDataSet1.Tag + 1;
end;
//..............................................................................
procedure TF_EB_Tagebuch_Tabelle.frxUserDataSet1Prior(Sender: TObject);
begin
    frxUserDataSet1.Tag := frxUserDataSet1.Tag - 1;
end;
//..............................................................................
procedure TF_EB_Tagebuch_Tabelle.frxUserDataSet1CheckEOF(Sender: TObject;
    var Eof: Boolean);
begin
    eof := frxUserDataSet1.Tag > fmax
end;
//..............................................................................
...
Wer weiss... was ich da falsch gemacht habe.

Vielleicht fällt Dir / Euch da etwas auf

(Die Lösung dieses Problems ist für viele meiner Programme von Bedeutung, ich bin gerade beim Umstieg auf RAD2007 und FastReport)


Danke für Eure Hilfe

E .B.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 16:03
Dann müsstest Du noch dem Masterband sagen, das es sich um dieses Userdataset kümmern muss und da kannst Du dann auch einstellen, ob er alle oder nur einen Record nehmen kann/soll. Doppelklick einfach auf das Dataset-Symbol rechts oben im Masterband-Titel. Dort schreibst Du '0' rein. Ach, warte mal. Ich bastle Dir ne Demo.
tick tack tick tack *bastel* tick tack *bastel* tick ta... *compilier*.... funzt.
Angehängte Dateien
Dateityp: rar frtest_133.rar (518,8 KB, 107x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 16:27
Vielen Dank Alzaimar,

ich hatte gleich mehrere Fehler in meinem Programm

1. Beim Prüfen des Datenendes
Delphi-Quellcode:
//falsch
procedure TF_EB_Tagebuch_Tabelle.frxUserDataSet1CheckEOF(Sender: TObject;
    var Eof: Boolean);
begin
    eof := frxUserDataSet1.Tag > fmax
end;
//richtig
procedure TF_EB_Tagebuch_Tabelle.frxUserDataSet1CheckEOF(Sender: TObject;
    var Eof: Boolean);
begin
    eof := (frxUserDataSet1.Tag = fmax);
end;
2. Das aufrufen des Reports
Delphi-Quellcode:
//falsch
procedure TF_EB_Tagebuch_Tabelle.B_DruckemClick(Sender: TObject);
begin
    frxReport1.ShowReport();
end;
//richtig
procedure TF_EB_Tagebuch_Tabelle.B_DruckemClick(Sender: TObject);
begin
    frxReport1.PrepareReport();
    frxReport1.ShowPreparedReport;
end;
2. Im FastReport Designer / Masterband
Im Fenster DataSet auswählen
falsch:
Anzahl der Datensätze=1 richtig:
Anzahl der Datensätze=0 Er zeigt zwar noch nicht alle Datensätze an aber das bekomme ich nun raus.

Ich habe zwar noch nicht begriffen warum Anzahl der Datensätze=0 sein muß...

Nochmals vielen Dank Alzaimar.
Eine gute Anleitung für das Database-freie Arbeiten mit FastReport

Grüße

E. B.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#8

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 17:21
Danke allerseits, besonders Alzaimar,
es funktioniert,
Nachahmen empfohlen

Grüße
E. B.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 8. Apr 2008, 17:25
Zitat von EccoBravo:
... Will ja nur Daten darstellen, nicht suchen und löschen.
Was nicht ist, kann ja noch werden. Und sei es nur zu Test- und Debugzwecken...
Zitat von EccoBravo:
Databases kann und darf ich nicht benutzen, da meine Programme auf Rechnern, die dem Medizinproduktegesetz unterliegen, laufen. Daher darf keine weitere DataBaseEngine laufen und die bereits laufende darf ich nicht mitbenutzen.
Es handelt sich bei Memory-Datasets nicht um eine Datenbank oder Datenbankengine.
Memory-Datasets sind einfach nur eine intelligente Art um tabellenartige Daten zu verpacken und über eine wohl definierte Schnittstelle (nämlich TDataset) zugänglich zu machen.

Ich habe selbst schon öfters den Fall gehabt, dass ich mit einem Record begonnen habe zu programmieren, dann eine Klasse von TList abgeleitet, um viele Records zu halten.
Und dann sollte nachträglich noch eine Druckfunktion hinzu.
Meistens kam mir dann die Erleuchtung: "du Dackel, nimm doch ein Memorydataset".
Also den ganzen Code umgebaut, aber ich hab's nie bereut. Es programmiert sich einfach viel leichter.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#10

Re: Array[..] of record mit FastReport in MasterDataBand aus

  Alt 9. Apr 2008, 11:23
Danke für die ausführliche Empfehlung.

ich will ja immer dazulernen. Werde es mal probieren.

Also nochmal Danke - es war ein prima Thread.

Grüße

E. B.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz